Skip to content
Snippets Groups Projects
Commit 1df6b29c authored by Jono Wenger's avatar Jono Wenger
Browse files

Fix single-use MAC and fingerprint to have their first bit be 0

parent 5d9b0dbc
No related branches found
No related tags found
No related merge requests found
...@@ -17,7 +17,12 @@ const macConstant = "macConstant" ...@@ -17,7 +17,12 @@ const macConstant = "macConstant"
// MakeMAC generates the MAC used in the cmix message holding the single-use // MakeMAC generates the MAC used in the cmix message holding the single-use
// payload. // payload.
func MakeMAC(dhKey *cyclic.Int, encryptedPayload []byte) []byte { func MakeMAC(dhKey *cyclic.Int, encryptedPayload []byte) []byte {
return makeHash(dhKey, encryptedPayload, []byte(macConstant)) mac := makeHash(dhKey, encryptedPayload, []byte(macConstant))
// Set the first bit as zero to ensure everything stays in the group
mac[0] &= 0b01111111
return mac
} }
// VerifyMAC determines if the provided MAC is valid for the given key and // VerifyMAC determines if the provided MAC is valid for the given key and
......
...@@ -20,13 +20,13 @@ func TestMAC_Consistency(t *testing.T) { ...@@ -20,13 +20,13 @@ func TestMAC_Consistency(t *testing.T) {
expectedMACs := []string{ expectedMACs := []string{
"D7vXMT3iX/1tvFPjowoz3w5b3PbECB4EFgkR3hNzyCM=", "D7vXMT3iX/1tvFPjowoz3w5b3PbECB4EFgkR3hNzyCM=",
"ffW26eqwyTHERUPHbmFkUitRj7c+c/PQayfwQPLihNs=", "ffW26eqwyTHERUPHbmFkUitRj7c+c/PQayfwQPLihNs=",
"/lyTEnFbzEEmmMjOQhq6qr0jUYE2j22ERcR4CLH9368=", "flyTEnFbzEEmmMjOQhq6qr0jUYE2j22ERcR4CLH9368=",
"vPB8eXP8BXWdxSU4a+Lp1pYVWb98COtWtR0sBngGyTs=", "PPB8eXP8BXWdxSU4a+Lp1pYVWb98COtWtR0sBngGyTs=",
"BuvhuSO01uM+nVQPwXlOwRzr7xchVM1dRoF9h5TC2HU=", "BuvhuSO01uM+nVQPwXlOwRzr7xchVM1dRoF9h5TC2HU=",
"vF5iYaFdhLtgOO5hWNpAF6jJaW4utF1MLGaz/gYb0TY=", "PF5iYaFdhLtgOO5hWNpAF6jJaW4utF1MLGaz/gYb0TY=",
"opI2htMJEqZvvEKHAwWnTSqgvaAempY9//rRxNNFHQU=", "IpI2htMJEqZvvEKHAwWnTSqgvaAempY9//rRxNNFHQU=",
"ppGzFglPaLzytF5gJRtSFbYoidsShEBoX1cxkAJY3F4=", "JpGzFglPaLzytF5gJRtSFbYoidsShEBoX1cxkAJY3F4=",
"pdzZmlz6qdChwo7B5sChTRUpQ5zLvlH5LgndOhDHAt8=", "JdzZmlz6qdChwo7B5sChTRUpQ5zLvlH5LgndOhDHAt8=",
"BHP2yvbUcynr6vM61qt+18YshTsyArJqv0VCq/EI3+o=", "BHP2yvbUcynr6vM61qt+18YshTsyArJqv0VCq/EI3+o=",
} }
grp := getGrp() grp := getGrp()
...@@ -91,13 +91,13 @@ func TestVerifyMAC(t *testing.T) { ...@@ -91,13 +91,13 @@ func TestVerifyMAC(t *testing.T) {
expectedMACs := []string{ expectedMACs := []string{
"D7vXMT3iX/1tvFPjowoz3w5b3PbECB4EFgkR3hNzyCM=", "D7vXMT3iX/1tvFPjowoz3w5b3PbECB4EFgkR3hNzyCM=",
"ffW26eqwyTHERUPHbmFkUitRj7c+c/PQayfwQPLihNs=", "ffW26eqwyTHERUPHbmFkUitRj7c+c/PQayfwQPLihNs=",
"/lyTEnFbzEEmmMjOQhq6qr0jUYE2j22ERcR4CLH9368=", "flyTEnFbzEEmmMjOQhq6qr0jUYE2j22ERcR4CLH9368=",
"vPB8eXP8BXWdxSU4a+Lp1pYVWb98COtWtR0sBngGyTs=", "PPB8eXP8BXWdxSU4a+Lp1pYVWb98COtWtR0sBngGyTs=",
"BuvhuSO01uM+nVQPwXlOwRzr7xchVM1dRoF9h5TC2HU=", "BuvhuSO01uM+nVQPwXlOwRzr7xchVM1dRoF9h5TC2HU=",
"vF5iYaFdhLtgOO5hWNpAF6jJaW4utF1MLGaz/gYb0TY=", "PF5iYaFdhLtgOO5hWNpAF6jJaW4utF1MLGaz/gYb0TY=",
"opI2htMJEqZvvEKHAwWnTSqgvaAempY9//rRxNNFHQU=", "IpI2htMJEqZvvEKHAwWnTSqgvaAempY9//rRxNNFHQU=",
"ppGzFglPaLzytF5gJRtSFbYoidsShEBoX1cxkAJY3F4=", "JpGzFglPaLzytF5gJRtSFbYoidsShEBoX1cxkAJY3F4=",
"pdzZmlz6qdChwo7B5sChTRUpQ5zLvlH5LgndOhDHAt8=", "JdzZmlz6qdChwo7B5sChTRUpQ5zLvlH5LgndOhDHAt8=",
"BHP2yvbUcynr6vM61qt+18YshTsyArJqv0VCq/EI3+o=", "BHP2yvbUcynr6vM61qt+18YshTsyArJqv0VCq/EI3+o=",
} }
grp := getGrp() grp := getGrp()
......
...@@ -21,5 +21,8 @@ func TransmitFingerprint(dhKey *cyclic.Int) format.Fingerprint { ...@@ -21,5 +21,8 @@ func TransmitFingerprint(dhKey *cyclic.Int) format.Fingerprint {
fp := format.Fingerprint{} fp := format.Fingerprint{}
copy(fp[:], makeHash(dhKey, []byte(transmitFPConstant))) copy(fp[:], makeHash(dhKey, []byte(transmitFPConstant)))
// Set the first bit as zero to ensure everything stays in the group
fp[0] &= 0b01111111
return fp return fp
} }
...@@ -20,16 +20,16 @@ import ( ...@@ -20,16 +20,16 @@ import (
// Tests that the generated fingerprints do not change. // Tests that the generated fingerprints do not change.
func TestTransmitFingerprint_Consistency(t *testing.T) { func TestTransmitFingerprint_Consistency(t *testing.T) {
expectedFPs := []string{ expectedFPs := []string{
"8xef7y86YmR6+qVBaVghPYbEd0j7seLUxR1v1dxqiNo=", "cxef7y86YmR6+qVBaVghPYbEd0j7seLUxR1v1dxqiNo=",
"LJ1HQ8zZPY3z+6UkKZMSDN2WymMmwuWW3GCjtAGfUlc=", "LJ1HQ8zZPY3z+6UkKZMSDN2WymMmwuWW3GCjtAGfUlc=",
"Fc8CN69uMxT1zBAr3Ed/AOy6Py3XDb3i7LngRsax0K8=", "Fc8CN69uMxT1zBAr3Ed/AOy6Py3XDb3i7LngRsax0K8=",
"4mvA+dxgIy/UxRVIvzFgGtEuMoWI8RodF7JMFIO5xcI=", "YmvA+dxgIy/UxRVIvzFgGtEuMoWI8RodF7JMFIO5xcI=",
"3YJPhLeI2+RawlSMUTEwTP1iJrFAa5zboCf5fjc/k3o=", "XYJPhLeI2+RawlSMUTEwTP1iJrFAa5zboCf5fjc/k3o=",
"mEOS0pDuNYS5hpNHeJ2IhzlZFf9J5oHRvFpovNwWS7c=", "GEOS0pDuNYS5hpNHeJ2IhzlZFf9J5oHRvFpovNwWS7c=",
"i3k7dv1Nch1oTT4aOxbBDifmf7+mT34ErFFaWW5LDb8=", "C3k7dv1Nch1oTT4aOxbBDifmf7+mT34ErFFaWW5LDb8=",
"ck/wkZ3lv0bcQuW+Z2dw37m+Re0URPw4UsWBPAWBEtw=", "ck/wkZ3lv0bcQuW+Z2dw37m+Re0URPw4UsWBPAWBEtw=",
"k/YRXaE2dplVPZSiEY+7C0e6GlDeR3jLrIPRWgeL3cI=", "E/YRXaE2dplVPZSiEY+7C0e6GlDeR3jLrIPRWgeL3cI=",
"qkT2Hfz8A7jNxOhDYG266b/hvWcQtAx0ay67Az80bAY=", "KkT2Hfz8A7jNxOhDYG266b/hvWcQtAx0ay67Az80bAY=",
} }
grp := getGrp() grp := getGrp()
prng := rand.New(rand.NewSource(42)) prng := rand.New(rand.NewSource(42))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment