streebog_generic.c (95d002e0a34cb0f238abb39987f9980f325d8332) | streebog_generic.c (c4741b23059794bd99beef0f700103b0d983b3fd) |
---|---|
1// SPDX-License-Identifier: GPL-2.0+ OR BSD-2-Clause 2/* 3 * Streebog hash function as specified by GOST R 34.11-2012 and 4 * described at https://tools.ietf.org/html/rfc6986 5 * 6 * Copyright (c) 2013 Alexey Degtyarev <alexey@renatasystems.org> 7 * Copyright (c) 2018 Vitaly Chikunov <vt@altlinux.org> 8 * --- 982 unchanged lines hidden (view full) --- 991 if (sum != left) 992 carry = (sum < left); 993 r->qword[i] = cpu_to_le64(sum); 994 } 995} 996 997static void streebog_g(struct streebog_uint512 *h, 998 const struct streebog_uint512 *N, | 1// SPDX-License-Identifier: GPL-2.0+ OR BSD-2-Clause 2/* 3 * Streebog hash function as specified by GOST R 34.11-2012 and 4 * described at https://tools.ietf.org/html/rfc6986 5 * 6 * Copyright (c) 2013 Alexey Degtyarev <alexey@renatasystems.org> 7 * Copyright (c) 2018 Vitaly Chikunov <vt@altlinux.org> 8 * --- 982 unchanged lines hidden (view full) --- 991 if (sum != left) 992 carry = (sum < left); 993 r->qword[i] = cpu_to_le64(sum); 994 } 995} 996 997static void streebog_g(struct streebog_uint512 *h, 998 const struct streebog_uint512 *N, |
999 const u8 *m) | 999 const struct streebog_uint512 *m) |
1000{ 1001 struct streebog_uint512 Ki, data; 1002 unsigned int i; 1003 1004 streebog_xlps(h, N, &data); 1005 1006 /* Starting E() */ 1007 Ki = data; | 1000{ 1001 struct streebog_uint512 Ki, data; 1002 unsigned int i; 1003 1004 streebog_xlps(h, N, &data); 1005 1006 /* Starting E() */ 1007 Ki = data; |
1008 streebog_xlps(&Ki, (const struct streebog_uint512 *)&m[0], &data); | 1008 streebog_xlps(&Ki, m, &data); |
1009 1010 for (i = 0; i < 11; i++) 1011 streebog_round(i, &Ki, &data); 1012 1013 streebog_xlps(&Ki, &C[11], &Ki); 1014 streebog_xor(&Ki, &data, &data); 1015 /* E() done */ 1016 1017 streebog_xor(&data, h, &data); | 1009 1010 for (i = 0; i < 11; i++) 1011 streebog_round(i, &Ki, &data); 1012 1013 streebog_xlps(&Ki, &C[11], &Ki); 1014 streebog_xor(&Ki, &data, &data); 1015 /* E() done */ 1016 1017 streebog_xor(&data, h, &data); |
1018 streebog_xor(&data, (const struct streebog_uint512 *)&m[0], h); | 1018 streebog_xor(&data, m, h); |
1019} 1020 1021static void streebog_stage2(struct streebog_state *ctx, const u8 *data) 1022{ | 1019} 1020 1021static void streebog_stage2(struct streebog_state *ctx, const u8 *data) 1022{ |
1023 streebog_g(&ctx->h, &ctx->N, data); | 1023 struct streebog_uint512 m; |
1024 | 1024 |
1025 memcpy(&m, data, sizeof(m)); 1026 1027 streebog_g(&ctx->h, &ctx->N, &m); 1028 |
|
1025 streebog_add512(&ctx->N, &buffer512, &ctx->N); | 1029 streebog_add512(&ctx->N, &buffer512, &ctx->N); |
1026 streebog_add512(&ctx->Sigma, (const struct streebog_uint512 *)data, 1027 &ctx->Sigma); | 1030 streebog_add512(&ctx->Sigma, &m, &ctx->Sigma); |
1028} 1029 1030static void streebog_stage3(struct streebog_state *ctx) 1031{ 1032 struct streebog_uint512 buf = { { 0 } }; 1033 1034 buf.qword[0] = cpu_to_le64(ctx->fillsize << 3); 1035 streebog_pad(ctx); 1036 | 1031} 1032 1033static void streebog_stage3(struct streebog_state *ctx) 1034{ 1035 struct streebog_uint512 buf = { { 0 } }; 1036 1037 buf.qword[0] = cpu_to_le64(ctx->fillsize << 3); 1038 streebog_pad(ctx); 1039 |
1037 streebog_g(&ctx->h, &ctx->N, (const u8 *)&ctx->buffer); | 1040 streebog_g(&ctx->h, &ctx->N, &ctx->m); |
1038 streebog_add512(&ctx->N, &buf, &ctx->N); | 1041 streebog_add512(&ctx->N, &buf, &ctx->N); |
1039 streebog_add512(&ctx->Sigma, 1040 (const struct streebog_uint512 *)&ctx->buffer[0], 1041 &ctx->Sigma); 1042 streebog_g(&ctx->h, &buffer0, (const u8 *)&ctx->N); 1043 streebog_g(&ctx->h, &buffer0, (const u8 *)&ctx->Sigma); | 1042 streebog_add512(&ctx->Sigma, &ctx->m, &ctx->Sigma); 1043 streebog_g(&ctx->h, &buffer0, &ctx->N); 1044 streebog_g(&ctx->h, &buffer0, &ctx->Sigma); |
1044 memcpy(&ctx->hash, &ctx->h, sizeof(struct streebog_uint512)); 1045} 1046 1047static int streebog_update(struct shash_desc *desc, const u8 *data, 1048 unsigned int len) 1049{ 1050 struct streebog_state *ctx = shash_desc_ctx(desc); 1051 size_t chunksize; --- 70 unchanged lines hidden (view full) --- 1122 return crypto_register_shashes(algs, ARRAY_SIZE(algs)); 1123} 1124 1125static void __exit streebog_mod_fini(void) 1126{ 1127 crypto_unregister_shashes(algs, ARRAY_SIZE(algs)); 1128} 1129 | 1045 memcpy(&ctx->hash, &ctx->h, sizeof(struct streebog_uint512)); 1046} 1047 1048static int streebog_update(struct shash_desc *desc, const u8 *data, 1049 unsigned int len) 1050{ 1051 struct streebog_state *ctx = shash_desc_ctx(desc); 1052 size_t chunksize; --- 70 unchanged lines hidden (view full) --- 1123 return crypto_register_shashes(algs, ARRAY_SIZE(algs)); 1124} 1125 1126static void __exit streebog_mod_fini(void) 1127{ 1128 crypto_unregister_shashes(algs, ARRAY_SIZE(algs)); 1129} 1130 |
1130module_init(streebog_mod_init); | 1131subsys_initcall(streebog_mod_init); |
1131module_exit(streebog_mod_fini); 1132 1133MODULE_LICENSE("GPL"); 1134MODULE_AUTHOR("Vitaly Chikunov <vt@altlinux.org>"); 1135MODULE_DESCRIPTION("Streebog Hash Function"); 1136 1137MODULE_ALIAS_CRYPTO("streebog256"); 1138MODULE_ALIAS_CRYPTO("streebog256-generic"); 1139MODULE_ALIAS_CRYPTO("streebog512"); 1140MODULE_ALIAS_CRYPTO("streebog512-generic"); | 1132module_exit(streebog_mod_fini); 1133 1134MODULE_LICENSE("GPL"); 1135MODULE_AUTHOR("Vitaly Chikunov <vt@altlinux.org>"); 1136MODULE_DESCRIPTION("Streebog Hash Function"); 1137 1138MODULE_ALIAS_CRYPTO("streebog256"); 1139MODULE_ALIAS_CRYPTO("streebog256-generic"); 1140MODULE_ALIAS_CRYPTO("streebog512"); 1141MODULE_ALIAS_CRYPTO("streebog512-generic"); |