diff options
author | miod <> | 2014-12-07 16:07:56 +0000 |
---|---|---|
committer | miod <> | 2014-12-07 16:07:56 +0000 |
commit | 4537f91502a17dad41a431e723dbab99cbda4069 (patch) | |
tree | 116ebb783d8e0a7d709f936807a59a62ba21ecc5 /src | |
parent | d0bbacc151e9bccff4588511de44901a286322c2 (diff) | |
download | openbsd-4537f91502a17dad41a431e723dbab99cbda4069.tar.gz openbsd-4537f91502a17dad41a431e723dbab99cbda4069.tar.bz2 openbsd-4537f91502a17dad41a431e723dbab99cbda4069.zip |
Correctly output the result in STREEBOG512_Final() when running on a big-endian
system. *blush*
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/libcrypto/gost/streebog.c | 33 | ||||
-rw-r--r-- | src/lib/libssl/src/crypto/gost/streebog.c | 33 |
2 files changed, 56 insertions, 10 deletions
diff --git a/src/lib/libcrypto/gost/streebog.c b/src/lib/libcrypto/gost/streebog.c index 0a49fca5d9..4e49201c2d 100644 --- a/src/lib/libcrypto/gost/streebog.c +++ b/src/lib/libcrypto/gost/streebog.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: streebog.c,v 1.2 2014/11/09 23:06:52 miod Exp $ */ | 1 | /* $OpenBSD: streebog.c,v 1.3 2014/12/07 16:07:56 miod Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2014 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> | 3 | * Copyright (c) 2014 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> |
4 | * Copyright (c) 2005-2006 Cryptocom LTD | 4 | * Copyright (c) 2005-2006 Cryptocom LTD |
@@ -49,6 +49,9 @@ | |||
49 | * ==================================================================== | 49 | * ==================================================================== |
50 | */ | 50 | */ |
51 | 51 | ||
52 | #include <machine/endian.h> | ||
53 | |||
54 | #include <stdlib.h> | ||
52 | #include <string.h> | 55 | #include <string.h> |
53 | 56 | ||
54 | #include <openssl/opensslconf.h> | 57 | #include <openssl/opensslconf.h> |
@@ -60,8 +63,7 @@ | |||
60 | 63 | ||
61 | #include "gost_locl.h" | 64 | #include "gost_locl.h" |
62 | 65 | ||
63 | static const STREEBOG_LONG64 A_PI_table[8][256] = | 66 | static const STREEBOG_LONG64 A_PI_table[8][256] = { |
64 | { | ||
65 | { /* 0 */ | 67 | { /* 0 */ |
66 | U64(0xd01f715b5c7ef8e6), U64(0x16fa240980778325), | 68 | U64(0xd01f715b5c7ef8e6), U64(0x16fa240980778325), |
67 | U64(0xa8a42e857ee049c8), U64(0x6ac1068fa186465b), | 69 | U64(0xa8a42e857ee049c8), U64(0x6ac1068fa186465b), |
@@ -1097,8 +1099,7 @@ static const STREEBOG_LONG64 A_PI_table[8][256] = | |||
1097 | }, | 1099 | }, |
1098 | }; | 1100 | }; |
1099 | 1101 | ||
1100 | static const STREEBOG_LONG64 C16[12][8] = | 1102 | static const STREEBOG_LONG64 C16[12][8] = { |
1101 | { | ||
1102 | { | 1103 | { |
1103 | U64(0xdd806559f2a64507), U64(0x05767436cc744d23), | 1104 | U64(0xdd806559f2a64507), U64(0x05767436cc744d23), |
1104 | U64(0xa2422a08a460d315), U64(0x4b7ce09192676901), | 1105 | U64(0xa2422a08a460d315), U64(0x4b7ce09192676901), |
@@ -1309,6 +1310,16 @@ STREEBOG512_Final(unsigned char *md, STREEBOG_CTX *c) | |||
1309 | for (n = 0; n < STREEBOG256_LENGTH / 8; n++) { | 1310 | for (n = 0; n < STREEBOG256_LENGTH / 8; n++) { |
1310 | STREEBOG_LONG64 t = c->h[4+n]; | 1311 | STREEBOG_LONG64 t = c->h[4+n]; |
1311 | 1312 | ||
1313 | #if BYTE_ORDER == BIG_ENDIAN | ||
1314 | *(md++) = (unsigned char)(t); | ||
1315 | *(md++) = (unsigned char)(t >> 8); | ||
1316 | *(md++) = (unsigned char)(t >> 16); | ||
1317 | *(md++) = (unsigned char)(t >> 24); | ||
1318 | *(md++) = (unsigned char)(t >> 32); | ||
1319 | *(md++) = (unsigned char)(t >> 40); | ||
1320 | *(md++) = (unsigned char)(t >> 48); | ||
1321 | *(md++) = (unsigned char)(t >> 56); | ||
1322 | #else | ||
1312 | *(md++) = (unsigned char)(t >> 56); | 1323 | *(md++) = (unsigned char)(t >> 56); |
1313 | *(md++) = (unsigned char)(t >> 48); | 1324 | *(md++) = (unsigned char)(t >> 48); |
1314 | *(md++) = (unsigned char)(t >> 40); | 1325 | *(md++) = (unsigned char)(t >> 40); |
@@ -1317,12 +1328,23 @@ STREEBOG512_Final(unsigned char *md, STREEBOG_CTX *c) | |||
1317 | *(md++) = (unsigned char)(t >> 16); | 1328 | *(md++) = (unsigned char)(t >> 16); |
1318 | *(md++) = (unsigned char)(t >> 8); | 1329 | *(md++) = (unsigned char)(t >> 8); |
1319 | *(md++) = (unsigned char)(t); | 1330 | *(md++) = (unsigned char)(t); |
1331 | #endif | ||
1320 | } | 1332 | } |
1321 | break; | 1333 | break; |
1322 | case STREEBOG512_LENGTH: | 1334 | case STREEBOG512_LENGTH: |
1323 | for (n = 0; n < STREEBOG512_LENGTH / 8; n++) { | 1335 | for (n = 0; n < STREEBOG512_LENGTH / 8; n++) { |
1324 | STREEBOG_LONG64 t = c->h[n]; | 1336 | STREEBOG_LONG64 t = c->h[n]; |
1325 | 1337 | ||
1338 | #if BYTE_ORDER == BIG_ENDIAN | ||
1339 | *(md++) = (unsigned char)(t); | ||
1340 | *(md++) = (unsigned char)(t >> 8); | ||
1341 | *(md++) = (unsigned char)(t >> 16); | ||
1342 | *(md++) = (unsigned char)(t >> 24); | ||
1343 | *(md++) = (unsigned char)(t >> 32); | ||
1344 | *(md++) = (unsigned char)(t >> 40); | ||
1345 | *(md++) = (unsigned char)(t >> 48); | ||
1346 | *(md++) = (unsigned char)(t >> 56); | ||
1347 | #else | ||
1326 | *(md++) = (unsigned char)(t >> 56); | 1348 | *(md++) = (unsigned char)(t >> 56); |
1327 | *(md++) = (unsigned char)(t >> 48); | 1349 | *(md++) = (unsigned char)(t >> 48); |
1328 | *(md++) = (unsigned char)(t >> 40); | 1350 | *(md++) = (unsigned char)(t >> 40); |
@@ -1331,6 +1353,7 @@ STREEBOG512_Final(unsigned char *md, STREEBOG_CTX *c) | |||
1331 | *(md++) = (unsigned char)(t >> 16); | 1353 | *(md++) = (unsigned char)(t >> 16); |
1332 | *(md++) = (unsigned char)(t >> 8); | 1354 | *(md++) = (unsigned char)(t >> 8); |
1333 | *(md++) = (unsigned char)(t); | 1355 | *(md++) = (unsigned char)(t); |
1356 | #endif | ||
1334 | } | 1357 | } |
1335 | break; | 1358 | break; |
1336 | /* ... as well as make sure md_len is not abused. */ | 1359 | /* ... as well as make sure md_len is not abused. */ |
diff --git a/src/lib/libssl/src/crypto/gost/streebog.c b/src/lib/libssl/src/crypto/gost/streebog.c index 0a49fca5d9..4e49201c2d 100644 --- a/src/lib/libssl/src/crypto/gost/streebog.c +++ b/src/lib/libssl/src/crypto/gost/streebog.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: streebog.c,v 1.2 2014/11/09 23:06:52 miod Exp $ */ | 1 | /* $OpenBSD: streebog.c,v 1.3 2014/12/07 16:07:56 miod Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2014 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> | 3 | * Copyright (c) 2014 Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> |
4 | * Copyright (c) 2005-2006 Cryptocom LTD | 4 | * Copyright (c) 2005-2006 Cryptocom LTD |
@@ -49,6 +49,9 @@ | |||
49 | * ==================================================================== | 49 | * ==================================================================== |
50 | */ | 50 | */ |
51 | 51 | ||
52 | #include <machine/endian.h> | ||
53 | |||
54 | #include <stdlib.h> | ||
52 | #include <string.h> | 55 | #include <string.h> |
53 | 56 | ||
54 | #include <openssl/opensslconf.h> | 57 | #include <openssl/opensslconf.h> |
@@ -60,8 +63,7 @@ | |||
60 | 63 | ||
61 | #include "gost_locl.h" | 64 | #include "gost_locl.h" |
62 | 65 | ||
63 | static const STREEBOG_LONG64 A_PI_table[8][256] = | 66 | static const STREEBOG_LONG64 A_PI_table[8][256] = { |
64 | { | ||
65 | { /* 0 */ | 67 | { /* 0 */ |
66 | U64(0xd01f715b5c7ef8e6), U64(0x16fa240980778325), | 68 | U64(0xd01f715b5c7ef8e6), U64(0x16fa240980778325), |
67 | U64(0xa8a42e857ee049c8), U64(0x6ac1068fa186465b), | 69 | U64(0xa8a42e857ee049c8), U64(0x6ac1068fa186465b), |
@@ -1097,8 +1099,7 @@ static const STREEBOG_LONG64 A_PI_table[8][256] = | |||
1097 | }, | 1099 | }, |
1098 | }; | 1100 | }; |
1099 | 1101 | ||
1100 | static const STREEBOG_LONG64 C16[12][8] = | 1102 | static const STREEBOG_LONG64 C16[12][8] = { |
1101 | { | ||
1102 | { | 1103 | { |
1103 | U64(0xdd806559f2a64507), U64(0x05767436cc744d23), | 1104 | U64(0xdd806559f2a64507), U64(0x05767436cc744d23), |
1104 | U64(0xa2422a08a460d315), U64(0x4b7ce09192676901), | 1105 | U64(0xa2422a08a460d315), U64(0x4b7ce09192676901), |
@@ -1309,6 +1310,16 @@ STREEBOG512_Final(unsigned char *md, STREEBOG_CTX *c) | |||
1309 | for (n = 0; n < STREEBOG256_LENGTH / 8; n++) { | 1310 | for (n = 0; n < STREEBOG256_LENGTH / 8; n++) { |
1310 | STREEBOG_LONG64 t = c->h[4+n]; | 1311 | STREEBOG_LONG64 t = c->h[4+n]; |
1311 | 1312 | ||
1313 | #if BYTE_ORDER == BIG_ENDIAN | ||
1314 | *(md++) = (unsigned char)(t); | ||
1315 | *(md++) = (unsigned char)(t >> 8); | ||
1316 | *(md++) = (unsigned char)(t >> 16); | ||
1317 | *(md++) = (unsigned char)(t >> 24); | ||
1318 | *(md++) = (unsigned char)(t >> 32); | ||
1319 | *(md++) = (unsigned char)(t >> 40); | ||
1320 | *(md++) = (unsigned char)(t >> 48); | ||
1321 | *(md++) = (unsigned char)(t >> 56); | ||
1322 | #else | ||
1312 | *(md++) = (unsigned char)(t >> 56); | 1323 | *(md++) = (unsigned char)(t >> 56); |
1313 | *(md++) = (unsigned char)(t >> 48); | 1324 | *(md++) = (unsigned char)(t >> 48); |
1314 | *(md++) = (unsigned char)(t >> 40); | 1325 | *(md++) = (unsigned char)(t >> 40); |
@@ -1317,12 +1328,23 @@ STREEBOG512_Final(unsigned char *md, STREEBOG_CTX *c) | |||
1317 | *(md++) = (unsigned char)(t >> 16); | 1328 | *(md++) = (unsigned char)(t >> 16); |
1318 | *(md++) = (unsigned char)(t >> 8); | 1329 | *(md++) = (unsigned char)(t >> 8); |
1319 | *(md++) = (unsigned char)(t); | 1330 | *(md++) = (unsigned char)(t); |
1331 | #endif | ||
1320 | } | 1332 | } |
1321 | break; | 1333 | break; |
1322 | case STREEBOG512_LENGTH: | 1334 | case STREEBOG512_LENGTH: |
1323 | for (n = 0; n < STREEBOG512_LENGTH / 8; n++) { | 1335 | for (n = 0; n < STREEBOG512_LENGTH / 8; n++) { |
1324 | STREEBOG_LONG64 t = c->h[n]; | 1336 | STREEBOG_LONG64 t = c->h[n]; |
1325 | 1337 | ||
1338 | #if BYTE_ORDER == BIG_ENDIAN | ||
1339 | *(md++) = (unsigned char)(t); | ||
1340 | *(md++) = (unsigned char)(t >> 8); | ||
1341 | *(md++) = (unsigned char)(t >> 16); | ||
1342 | *(md++) = (unsigned char)(t >> 24); | ||
1343 | *(md++) = (unsigned char)(t >> 32); | ||
1344 | *(md++) = (unsigned char)(t >> 40); | ||
1345 | *(md++) = (unsigned char)(t >> 48); | ||
1346 | *(md++) = (unsigned char)(t >> 56); | ||
1347 | #else | ||
1326 | *(md++) = (unsigned char)(t >> 56); | 1348 | *(md++) = (unsigned char)(t >> 56); |
1327 | *(md++) = (unsigned char)(t >> 48); | 1349 | *(md++) = (unsigned char)(t >> 48); |
1328 | *(md++) = (unsigned char)(t >> 40); | 1350 | *(md++) = (unsigned char)(t >> 40); |
@@ -1331,6 +1353,7 @@ STREEBOG512_Final(unsigned char *md, STREEBOG_CTX *c) | |||
1331 | *(md++) = (unsigned char)(t >> 16); | 1353 | *(md++) = (unsigned char)(t >> 16); |
1332 | *(md++) = (unsigned char)(t >> 8); | 1354 | *(md++) = (unsigned char)(t >> 8); |
1333 | *(md++) = (unsigned char)(t); | 1355 | *(md++) = (unsigned char)(t); |
1356 | #endif | ||
1334 | } | 1357 | } |
1335 | break; | 1358 | break; |
1336 | /* ... as well as make sure md_len is not abused. */ | 1359 | /* ... as well as make sure md_len is not abused. */ |