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"
// MakeMAC generates the MAC used in the cmix message holding the single-use
// payload.
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
......
......@@ -20,13 +20,13 @@ func TestMAC_Consistency(t *testing.T) {
expectedMACs := []string{
"D7vXMT3iX/1tvFPjowoz3w5b3PbECB4EFgkR3hNzyCM=",
"ffW26eqwyTHERUPHbmFkUitRj7c+c/PQayfwQPLihNs=",
"/lyTEnFbzEEmmMjOQhq6qr0jUYE2j22ERcR4CLH9368=",
"vPB8eXP8BXWdxSU4a+Lp1pYVWb98COtWtR0sBngGyTs=",
"flyTEnFbzEEmmMjOQhq6qr0jUYE2j22ERcR4CLH9368=",
"PPB8eXP8BXWdxSU4a+Lp1pYVWb98COtWtR0sBngGyTs=",
"BuvhuSO01uM+nVQPwXlOwRzr7xchVM1dRoF9h5TC2HU=",
"vF5iYaFdhLtgOO5hWNpAF6jJaW4utF1MLGaz/gYb0TY=",
"opI2htMJEqZvvEKHAwWnTSqgvaAempY9//rRxNNFHQU=",
"ppGzFglPaLzytF5gJRtSFbYoidsShEBoX1cxkAJY3F4=",
"pdzZmlz6qdChwo7B5sChTRUpQ5zLvlH5LgndOhDHAt8=",
"PF5iYaFdhLtgOO5hWNpAF6jJaW4utF1MLGaz/gYb0TY=",
"IpI2htMJEqZvvEKHAwWnTSqgvaAempY9//rRxNNFHQU=",
"JpGzFglPaLzytF5gJRtSFbYoidsShEBoX1cxkAJY3F4=",
"JdzZmlz6qdChwo7B5sChTRUpQ5zLvlH5LgndOhDHAt8=",
"BHP2yvbUcynr6vM61qt+18YshTsyArJqv0VCq/EI3+o=",
}
grp := getGrp()
......@@ -91,13 +91,13 @@ func TestVerifyMAC(t *testing.T) {
expectedMACs := []string{
"D7vXMT3iX/1tvFPjowoz3w5b3PbECB4EFgkR3hNzyCM=",
"ffW26eqwyTHERUPHbmFkUitRj7c+c/PQayfwQPLihNs=",
"/lyTEnFbzEEmmMjOQhq6qr0jUYE2j22ERcR4CLH9368=",
"vPB8eXP8BXWdxSU4a+Lp1pYVWb98COtWtR0sBngGyTs=",
"flyTEnFbzEEmmMjOQhq6qr0jUYE2j22ERcR4CLH9368=",
"PPB8eXP8BXWdxSU4a+Lp1pYVWb98COtWtR0sBngGyTs=",
"BuvhuSO01uM+nVQPwXlOwRzr7xchVM1dRoF9h5TC2HU=",
"vF5iYaFdhLtgOO5hWNpAF6jJaW4utF1MLGaz/gYb0TY=",
"opI2htMJEqZvvEKHAwWnTSqgvaAempY9//rRxNNFHQU=",
"ppGzFglPaLzytF5gJRtSFbYoidsShEBoX1cxkAJY3F4=",
"pdzZmlz6qdChwo7B5sChTRUpQ5zLvlH5LgndOhDHAt8=",
"PF5iYaFdhLtgOO5hWNpAF6jJaW4utF1MLGaz/gYb0TY=",
"IpI2htMJEqZvvEKHAwWnTSqgvaAempY9//rRxNNFHQU=",
"JpGzFglPaLzytF5gJRtSFbYoidsShEBoX1cxkAJY3F4=",
"JdzZmlz6qdChwo7B5sChTRUpQ5zLvlH5LgndOhDHAt8=",
"BHP2yvbUcynr6vM61qt+18YshTsyArJqv0VCq/EI3+o=",
}
grp := getGrp()
......
......@@ -21,5 +21,8 @@ func TransmitFingerprint(dhKey *cyclic.Int) format.Fingerprint {
fp := format.Fingerprint{}
copy(fp[:], makeHash(dhKey, []byte(transmitFPConstant)))
// Set the first bit as zero to ensure everything stays in the group
fp[0] &= 0b01111111
return fp
}
......@@ -20,16 +20,16 @@ import (
// Tests that the generated fingerprints do not change.
func TestTransmitFingerprint_Consistency(t *testing.T) {
expectedFPs := []string{
"8xef7y86YmR6+qVBaVghPYbEd0j7seLUxR1v1dxqiNo=",
"cxef7y86YmR6+qVBaVghPYbEd0j7seLUxR1v1dxqiNo=",
"LJ1HQ8zZPY3z+6UkKZMSDN2WymMmwuWW3GCjtAGfUlc=",
"Fc8CN69uMxT1zBAr3Ed/AOy6Py3XDb3i7LngRsax0K8=",
"4mvA+dxgIy/UxRVIvzFgGtEuMoWI8RodF7JMFIO5xcI=",
"3YJPhLeI2+RawlSMUTEwTP1iJrFAa5zboCf5fjc/k3o=",
"mEOS0pDuNYS5hpNHeJ2IhzlZFf9J5oHRvFpovNwWS7c=",
"i3k7dv1Nch1oTT4aOxbBDifmf7+mT34ErFFaWW5LDb8=",
"YmvA+dxgIy/UxRVIvzFgGtEuMoWI8RodF7JMFIO5xcI=",
"XYJPhLeI2+RawlSMUTEwTP1iJrFAa5zboCf5fjc/k3o=",
"GEOS0pDuNYS5hpNHeJ2IhzlZFf9J5oHRvFpovNwWS7c=",
"C3k7dv1Nch1oTT4aOxbBDifmf7+mT34ErFFaWW5LDb8=",
"ck/wkZ3lv0bcQuW+Z2dw37m+Re0URPw4UsWBPAWBEtw=",
"k/YRXaE2dplVPZSiEY+7C0e6GlDeR3jLrIPRWgeL3cI=",
"qkT2Hfz8A7jNxOhDYG266b/hvWcQtAx0ay67Az80bAY=",
"E/YRXaE2dplVPZSiEY+7C0e6GlDeR3jLrIPRWgeL3cI=",
"KkT2Hfz8A7jNxOhDYG266b/hvWcQtAx0ay67Az80bAY=",
}
grp := getGrp()
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