summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormiod <>2014-12-07 16:07:56 +0000
committermiod <>2014-12-07 16:07:56 +0000
commit4537f91502a17dad41a431e723dbab99cbda4069 (patch)
tree116ebb783d8e0a7d709f936807a59a62ba21ecc5 /src
parentd0bbacc151e9bccff4588511de44901a286322c2 (diff)
downloadopenbsd-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.c33
-rw-r--r--src/lib/libssl/src/crypto/gost/streebog.c33
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
63static const STREEBOG_LONG64 A_PI_table[8][256] = 66static 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
1100static const STREEBOG_LONG64 C16[12][8] = 1102static 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
63static const STREEBOG_LONG64 A_PI_table[8][256] = 66static 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
1100static const STREEBOG_LONG64 C16[12][8] = 1102static 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. */