Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
Wim Lewis
nettle
Commits
39ea0d27
Commit
39ea0d27
authored
Mar 26, 2014
by
Niels Möller
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
New struct dsa_params. Use for dsa_sign and dsa_verify. Updated users.
parent
5c232aa8
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
132 additions
and
80 deletions
+132
-80
ChangeLog
ChangeLog
+23
-0
dsa-sha1-sign.c
dsa-sha1-sign.c
+5
-3
dsa-sha1-verify.c
dsa-sha1-verify.c
+4
-4
dsa-sha256-sign.c
dsa-sha256-sign.c
+4
-2
dsa-sha256-verify.c
dsa-sha256-verify.c
+4
-4
dsa-sign.c
dsa-sign.c
+10
-10
dsa-verify.c
dsa-verify.c
+12
-11
dsa.h
dsa.h
+19
-5
testsuite/dsa-keygen-test.c
testsuite/dsa-keygen-test.c
+6
-4
testsuite/dsa-test.c
testsuite/dsa-test.c
+19
-18
testsuite/testutils.c
testsuite/testutils.c
+21
-16
testsuite/testutils.h
testsuite/testutils.h
+5
-3
No files found.
ChangeLog
View file @
39ea0d27
2014-03-26 Niels Möller <nisse@lysator.liu.se>
* dsa.h (struct dsa_params): New struct.
* dsa-sign.c (dsa_sign): Use struct dsa_params, with key as a
separate mpz_t.
* dsa-verify.c (dsa_verify): Likewise.
* dsa-sha1-verify.c (dsa_sha1_verify_digest, dsa_sha1_verify): Use
dsa_verify, cast the struct dsa_public_key * input to a struct
dsa_params *
* dsa-sha256-verify.c (dsa_sha256_verify_digest)
(dsa_sha256_verify): Likewise.
* dsa-sha1-sign.c (dsa_sha1_sign_digest, dsa_sha1_sign): Likewise
use dsa_sign, with a cast from struct dsa_public_key * to struct
dsa_params *.
* dsa-sha256-sign.c (dsa_sha256_sign_digest, dsa_sha256_sign):
Likewise.
* testsuite/testutils.c (test_dsa_verify): Use struct dsa_params.
(test_dsa_key): Likewise.
* testsuite/dsa-test.c (test_main): Adapt to test_dsa_key and
test_dsa_verify changes.
* testsuite/dsa-keygen-test.c (test_main): Adapt to
test_dsa_key change.
* testsuite/testutils.c (test_dsa_sign): #if out, currently
unused.
...
...
dsa-sha1-sign.c
View file @
39ea0d27
...
...
@@ -36,7 +36,8 @@ dsa_sha1_sign_digest(const struct dsa_public_key *pub,
const
uint8_t
*
digest
,
struct
dsa_signature
*
signature
)
{
return
dsa_sign
(
pub
,
key
,
random_ctx
,
random
,
return
dsa_sign
((
const
struct
dsa_params
*
)
pub
,
key
->
x
,
random_ctx
,
random
,
SHA1_DIGEST_SIZE
,
digest
,
signature
);
}
...
...
@@ -50,7 +51,8 @@ dsa_sha1_sign(const struct dsa_public_key *pub,
{
uint8_t
digest
[
SHA1_DIGEST_SIZE
];
sha1_digest
(
hash
,
sizeof
(
digest
),
digest
);
return
dsa_sign
(
pub
,
key
,
random_ctx
,
random
,
return
dsa_sign
((
const
struct
dsa_params
*
)
pub
,
key
->
x
,
random_ctx
,
random
,
sizeof
(
digest
),
digest
,
signature
);
}
dsa-sha1-verify.c
View file @
39ea0d27
...
...
@@ -27,8 +27,6 @@
# include "config.h"
#endif
#include <stdlib.h>
#include "dsa.h"
int
...
...
@@ -36,7 +34,8 @@ dsa_sha1_verify_digest(const struct dsa_public_key *key,
const
uint8_t
*
digest
,
const
struct
dsa_signature
*
signature
)
{
return
dsa_verify
(
key
,
SHA1_DIGEST_SIZE
,
digest
,
signature
);
return
dsa_verify
((
const
struct
dsa_params
*
)
key
,
key
->
y
,
SHA1_DIGEST_SIZE
,
digest
,
signature
);
}
int
...
...
@@ -47,5 +46,6 @@ dsa_sha1_verify(const struct dsa_public_key *key,
uint8_t
digest
[
SHA1_DIGEST_SIZE
];
sha1_digest
(
hash
,
sizeof
(
digest
),
digest
);
return
dsa_verify
(
key
,
sizeof
(
digest
),
digest
,
signature
);
return
dsa_verify
((
const
struct
dsa_params
*
)
key
,
key
->
y
,
sizeof
(
digest
),
digest
,
signature
);
}
dsa-sha256-sign.c
View file @
39ea0d27
...
...
@@ -36,7 +36,8 @@ dsa_sha256_sign_digest(const struct dsa_public_key *pub,
const
uint8_t
*
digest
,
struct
dsa_signature
*
signature
)
{
return
dsa_sign
(
pub
,
key
,
random_ctx
,
random
,
return
dsa_sign
((
const
struct
dsa_params
*
)
pub
,
key
->
x
,
random_ctx
,
random
,
SHA256_DIGEST_SIZE
,
digest
,
signature
);
}
...
...
@@ -50,6 +51,7 @@ dsa_sha256_sign(const struct dsa_public_key *pub,
uint8_t
digest
[
SHA256_DIGEST_SIZE
];
sha256_digest
(
hash
,
sizeof
(
digest
),
digest
);
return
dsa_sign
(
pub
,
key
,
random_ctx
,
random
,
return
dsa_sign
((
const
struct
dsa_params
*
)
pub
,
key
->
x
,
random_ctx
,
random
,
sizeof
(
digest
),
digest
,
signature
);
}
dsa-sha256-verify.c
View file @
39ea0d27
...
...
@@ -27,8 +27,6 @@
# include "config.h"
#endif
#include <stdlib.h>
#include "dsa.h"
int
...
...
@@ -36,7 +34,8 @@ dsa_sha256_verify_digest(const struct dsa_public_key *key,
const
uint8_t
*
digest
,
const
struct
dsa_signature
*
signature
)
{
return
dsa_verify
(
key
,
SHA256_DIGEST_SIZE
,
digest
,
signature
);
return
dsa_verify
((
const
struct
dsa_params
*
)
key
,
key
->
y
,
SHA256_DIGEST_SIZE
,
digest
,
signature
);
}
int
...
...
@@ -47,5 +46,6 @@ dsa_sha256_verify(const struct dsa_public_key *key,
uint8_t
digest
[
SHA256_DIGEST_SIZE
];
sha256_digest
(
hash
,
sizeof
(
digest
),
digest
);
return
dsa_verify
(
key
,
sizeof
(
digest
),
digest
,
signature
);
return
dsa_verify
((
const
struct
dsa_params
*
)
key
,
key
->
y
,
sizeof
(
digest
),
digest
,
signature
);
}
dsa-sign.c
View file @
39ea0d27
...
...
@@ -36,8 +36,8 @@
int
dsa_sign
(
const
struct
dsa_p
ublic_key
*
pub
,
const
struct
dsa_private_key
*
key
,
dsa_sign
(
const
struct
dsa_p
arams
*
params
,
const
mpz_t
x
,
void
*
random_ctx
,
nettle_random_func
*
random
,
size_t
digest_size
,
const
uint8_t
*
digest
,
...
...
@@ -49,7 +49,7 @@ dsa_sign(const struct dsa_public_key *pub,
int
res
;
/* Select k, 0<k<q, randomly */
mpz_init_set
(
tmp
,
p
ub
->
q
);
mpz_init_set
(
tmp
,
p
arams
->
q
);
mpz_sub_ui
(
tmp
,
tmp
,
1
);
mpz_init
(
k
);
...
...
@@ -57,22 +57,22 @@ dsa_sign(const struct dsa_public_key *pub,
mpz_add_ui
(
k
,
k
,
1
);
/* Compute r = (g^k (mod p)) (mod q) */
mpz_powm
(
tmp
,
p
ub
->
g
,
k
,
p
ub
->
p
);
mpz_fdiv_r
(
signature
->
r
,
tmp
,
p
ub
->
q
);
mpz_powm
(
tmp
,
p
arams
->
g
,
k
,
p
arams
->
p
);
mpz_fdiv_r
(
signature
->
r
,
tmp
,
p
arams
->
q
);
/* Compute hash */
mpz_init
(
h
);
_dsa_hash
(
h
,
mpz_sizeinbase
(
p
ub
->
q
,
2
),
digest_size
,
digest
);
_dsa_hash
(
h
,
mpz_sizeinbase
(
p
arams
->
q
,
2
),
digest_size
,
digest
);
/* Compute k^-1 (mod q) */
if
(
mpz_invert
(
k
,
k
,
p
ub
->
q
))
if
(
mpz_invert
(
k
,
k
,
p
arams
->
q
))
{
/* Compute signature s = k^-1 (h + xr) (mod q) */
mpz_mul
(
tmp
,
signature
->
r
,
key
->
x
);
mpz_fdiv_r
(
tmp
,
tmp
,
p
ub
->
q
);
mpz_mul
(
tmp
,
signature
->
r
,
x
);
mpz_fdiv_r
(
tmp
,
tmp
,
p
arams
->
q
);
mpz_add
(
tmp
,
tmp
,
h
);
mpz_mul
(
tmp
,
tmp
,
k
);
mpz_fdiv_r
(
signature
->
s
,
tmp
,
p
ub
->
q
);
mpz_fdiv_r
(
signature
->
s
,
tmp
,
p
arams
->
q
);
res
=
1
;
}
else
...
...
dsa-verify.c
View file @
39ea0d27
...
...
@@ -34,7 +34,8 @@
#include "bignum.h"
int
dsa_verify
(
const
struct
dsa_public_key
*
key
,
dsa_verify
(
const
struct
dsa_params
*
params
,
const
mpz_t
y
,
size_t
digest_size
,
const
uint8_t
*
digest
,
const
struct
dsa_signature
*
signature
)
...
...
@@ -46,10 +47,10 @@ dsa_verify(const struct dsa_public_key *key,
int
res
;
/* Check that r and s are in the proper range */
if
(
mpz_sgn
(
signature
->
r
)
<=
0
||
mpz_cmp
(
signature
->
r
,
key
->
q
)
>=
0
)
if
(
mpz_sgn
(
signature
->
r
)
<=
0
||
mpz_cmp
(
signature
->
r
,
params
->
q
)
>=
0
)
return
0
;
if
(
mpz_sgn
(
signature
->
s
)
<=
0
||
mpz_cmp
(
signature
->
s
,
key
->
q
)
>=
0
)
if
(
mpz_sgn
(
signature
->
s
)
<=
0
||
mpz_cmp
(
signature
->
s
,
params
->
q
)
>=
0
)
return
0
;
mpz_init
(
w
);
...
...
@@ -58,7 +59,7 @@ dsa_verify(const struct dsa_public_key *key,
/* NOTE: In gmp-2, mpz_invert sometimes generates negative inverses,
* so we need gmp-3 or better. */
if
(
!
mpz_invert
(
w
,
signature
->
s
,
key
->
q
))
if
(
!
mpz_invert
(
w
,
signature
->
s
,
params
->
q
))
{
mpz_clear
(
w
);
return
0
;
...
...
@@ -68,25 +69,25 @@ dsa_verify(const struct dsa_public_key *key,
mpz_init
(
v
);
/* The message digest */
_dsa_hash
(
tmp
,
mpz_sizeinbase
(
key
->
q
,
2
),
digest_size
,
digest
);
_dsa_hash
(
tmp
,
mpz_sizeinbase
(
params
->
q
,
2
),
digest_size
,
digest
);
/* v = g^{w * h (mod q)} (mod p) */
mpz_mul
(
tmp
,
tmp
,
w
);
mpz_fdiv_r
(
tmp
,
tmp
,
key
->
q
);
mpz_fdiv_r
(
tmp
,
tmp
,
params
->
q
);
mpz_powm
(
v
,
key
->
g
,
tmp
,
key
->
p
);
mpz_powm
(
v
,
params
->
g
,
tmp
,
params
->
p
);
/* y^{w * r (mod q) } (mod p) */
mpz_mul
(
tmp
,
signature
->
r
,
w
);
mpz_fdiv_r
(
tmp
,
tmp
,
key
->
q
);
mpz_fdiv_r
(
tmp
,
tmp
,
params
->
q
);
mpz_powm
(
tmp
,
key
->
y
,
tmp
,
key
->
p
);
mpz_powm
(
tmp
,
y
,
tmp
,
params
->
p
);
/* v = (g^{w * h} * y^{w * r} (mod p) ) (mod q) */
mpz_mul
(
v
,
v
,
tmp
);
mpz_fdiv_r
(
v
,
v
,
key
->
p
);
mpz_fdiv_r
(
v
,
v
,
params
->
p
);
mpz_fdiv_r
(
v
,
v
,
key
->
q
);
mpz_fdiv_r
(
v
,
v
,
params
->
q
);
res
=
!
mpz_cmp
(
v
,
signature
->
r
);
...
...
dsa.h
View file @
39ea0d27
...
...
@@ -5,7 +5,7 @@
/* nettle, low-level cryptographics library
*
* Copyright (C) 2002 Niels Möller
* Copyright (C) 2002
, 2013, 2014
Niels Möller
*
* The nettle library is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
...
...
@@ -66,6 +66,7 @@ extern "C" {
#define dsa_openssl_private_key_from_der nettle_openssl_provate_key_from_der
#define _dsa_hash _nettle_dsa_hash
/* For FIPS approved parameters */
#define DSA_SHA1_MIN_P_BITS 512
#define DSA_SHA1_Q_OCTETS 20
#define DSA_SHA1_Q_BITS 160
...
...
@@ -73,7 +74,19 @@ extern "C" {
#define DSA_SHA256_MIN_P_BITS 1024
#define DSA_SHA256_Q_OCTETS 32
#define DSA_SHA256_Q_BITS 256
struct
dsa_params
{
/* Modulo */
mpz_t
p
;
/* Group order */
mpz_t
q
;
/* Generator */
mpz_t
g
;
};
struct
dsa_public_key
{
/* Modulo */
...
...
@@ -173,15 +186,16 @@ dsa_sha256_verify(const struct dsa_public_key *key,
const
struct
dsa_signature
*
signature
);
int
dsa_sign
(
const
struct
dsa_p
ublic_key
*
pub
,
const
struct
dsa_private_key
*
key
,
dsa_sign
(
const
struct
dsa_p
arams
*
params
,
const
mpz_t
x
,
void
*
random_ctx
,
nettle_random_func
*
random
,
size_t
digest_size
,
const
uint8_t
*
digest
,
struct
dsa_signature
*
signature
);
int
dsa_verify
(
const
struct
dsa_public_key
*
key
,
dsa_verify
(
const
struct
dsa_params
*
params
,
const
mpz_t
y
,
size_t
digest_size
,
const
uint8_t
*
digest
,
const
struct
dsa_signature
*
signature
);
...
...
testsuite/dsa-keygen-test.c
View file @
39ea0d27
...
...
@@ -13,7 +13,8 @@ test_main(void)
{
struct
dsa_public_key
pub
;
struct
dsa_private_key
key
;
struct
dsa_params
*
params
;
struct
knuth_lfib_ctx
lfib
;
dsa_private_key_init
(
&
key
);
...
...
@@ -21,13 +22,14 @@ test_main(void)
knuth_lfib_init
(
&
lfib
,
13
);
params
=
(
struct
dsa_params
*
)
&
pub
;
ASSERT
(
dsa_generate_keypair
(
&
pub
,
&
key
,
&
lfib
,
(
nettle_random_func
*
)
knuth_lfib_random
,
NULL
,
verbose
?
progress
:
NULL
,
1024
,
160
));
test_dsa_key
(
&
pub
,
&
key
,
160
);
test_dsa_key
(
params
,
pub
.
y
,
key
.
x
,
160
);
test_dsa160
(
&
pub
,
&
key
,
NULL
);
ASSERT
(
dsa_generate_keypair
(
&
pub
,
&
key
,
...
...
@@ -36,7 +38,7 @@ test_main(void)
NULL
,
verbose
?
progress
:
NULL
,
2048
,
256
));
test_dsa_key
(
&
pub
,
&
key
,
256
);
test_dsa_key
(
params
,
pub
.
y
,
key
.
x
,
256
);
test_dsa256
(
&
pub
,
&
key
,
NULL
);
ASSERT
(
dsa_generate_keypair
(
&
pub
,
&
key
,
...
...
@@ -45,7 +47,7 @@ test_main(void)
NULL
,
verbose
?
progress
:
NULL
,
2048
,
224
));
test_dsa_key
(
&
pub
,
&
key
,
224
);
test_dsa_key
(
params
,
pub
.
y
,
key
.
x
,
224
);
test_dsa256
(
&
pub
,
&
key
,
NULL
);
dsa_public_key_clear
(
&
pub
);
...
...
testsuite/dsa-test.c
View file @
39ea0d27
...
...
@@ -6,7 +6,8 @@ test_main(void)
struct
dsa_public_key
pub
;
struct
dsa_private_key
key
;
struct
dsa_signature
signature
;
struct
dsa_params
*
params
=
(
struct
dsa_params
*
)
&
pub
;
dsa_public_key_init
(
&
pub
);
dsa_private_key_init
(
&
key
);
dsa_signature_init
(
&
signature
);
...
...
@@ -37,7 +38,7 @@ test_main(void)
mpz_set_str
(
key
.
x
,
"56c6efaf878d06eef21dc070fab71da6ec1e30a6"
,
16
);
test_dsa_key
(
&
pub
,
&
key
,
160
);
test_dsa_key
(
params
,
pub
.
y
,
key
.
x
,
160
);
mpz_set_str
(
signature
.
r
,
"180342f8d4fb5bd0311ebf205bdee6e556014eaf"
,
16
);
mpz_set_str
(
signature
.
s
,
"392dc6566b2735531a8460966171464ef7ddfe12"
,
16
);
...
...
@@ -87,7 +88,7 @@ test_main(void)
"39f84f88569da55c6bee7e18175b539ea9b7ee24fabd85a7"
"1fa8c93b7181545b"
,
16
);
test_dsa_key
(
&
pub
,
&
key
,
256
);
test_dsa_key
(
params
,
pub
.
y
,
key
.
x
,
256
);
mpz_set_str
(
signature
.
r
,
"03fe95c9dbbe1be019d7914e45c37c70"
...
...
@@ -127,7 +128,7 @@ test_main(void)
mpz_set_str
(
signature
.
r
,
"50ed0e810e3f1c7cb6ac62332058448bd8b284c0"
,
16
);
mpz_set_str
(
signature
.
s
,
"c6aded17216b46b7e4b6f2a97c1ad7cc3da83fde"
,
16
);
test_dsa_verify
(
&
pub
,
&
nettle_sha1
,
test_dsa_verify
(
params
,
pub
.
y
,
&
nettle_sha1
,
SHEX
(
"3b46736d559bd4e0c2c1b2553a33ad3c6cf23cac998d3d0c"
"0e8fa4b19bca06f2f386db2dcff9dca4f40ad8f561ffc308"
"b46c5f31a7735b5fa7e0f9e6cb512e63d7eea05538d66a75"
...
...
@@ -146,7 +147,7 @@ test_main(void)
mpz_set_str
(
signature
.
r
,
"a26c00b5750a2d27fe7435b93476b35438b4d8ab"
,
16
);
mpz_set_str
(
signature
.
s
,
"61c9bfcb2938755afa7dad1d1e07c6288617bf70"
,
16
);
test_dsa_verify
(
&
pub
,
&
nettle_sha1
,
test_dsa_verify
(
params
,
pub
.
y
,
&
nettle_sha1
,
SHEX
(
"d2bcb53b044b3e2e4b61ba2f91c0995fb83a6a97525e6644"
"1a3b489d9594238bc740bdeea0f718a769c977e2de003877"
"b5d7dc25b182ae533db33e78f2c3ff0645f2137abc137d4e"
...
...
@@ -180,7 +181,7 @@ test_main(void)
"7011f2285f794557"
,
16
);
mpz_set_str
(
signature
.
r
,
"afee719e7f848b54349ccc3b4fb26065833a4d8e"
,
16
);
mpz_set_str
(
signature
.
s
,
"734efe992256f31325e749bc32a24a1f957b3a1b"
,
16
);
test_dsa_verify
(
&
pub
,
&
nettle_sha224
,
test_dsa_verify
(
params
,
pub
.
y
,
&
nettle_sha224
,
SHEX
(
"fb2128052509488cad0745ed3e6312850dd96ddaf791f1e6"
"24e22a6b9beaa65319c325c78ef59cacba0ccfa722259f24"
"f92c17b77a8f6d8e97c93d880d2d8dbbbedcf6acefa06b0e"
...
...
@@ -214,7 +215,7 @@ test_main(void)
"85183889205591e8"
,
16
);
mpz_set_str
(
signature
.
r
,
"76683a085d6742eadf95a61af75f881276cfd26a"
,
16
);
mpz_set_str
(
signature
.
s
,
"3b9da7f9926eaaad0bebd4845c67fcdb64d12453"
,
16
);
test_dsa_verify
(
&
pub
,
&
nettle_sha256
,
test_dsa_verify
(
params
,
pub
.
y
,
&
nettle_sha256
,
SHEX
(
"812172f09cbae62517804885754125fc6066e9a902f9db20"
"41eeddd7e8da67e4a2e65d0029c45ecacea6002f9540eb10"
"04c883a8f900fd84a98b5c449ac49c56f3a91d8bed3f08f4"
...
...
@@ -266,7 +267,7 @@ test_main(void)
"45df2f423e94bf155dd4e1d9e63f315ea606dd38527d4cf6328738c8"
,
16
);
mpz_set_str
(
signature
.
s
,
"59b3e8efa5bc0ccbf4a3cbb6515c4b9bf784cfacdcc101dc9f81d31f"
,
16
);
test_dsa_verify
(
&
pub
,
&
nettle_sha1
,
test_dsa_verify
(
params
,
pub
.
y
,
&
nettle_sha1
,
SHEX
(
"edc6fd9b6c6e8a59f283016f7f29ee16deeaa609b5737927"
"162aef34fed985d0bcb550275637ba67831a2d4efccb3529"
"6dfe730f4a0b4f4728d1d7d1bb8f4a36238a5c94311fa113"
...
...
@@ -317,7 +318,7 @@ test_main(void)
"65102e8f64ecb11f06017b1a0c0def3c29897c277c4a948b1f4da6b9"
,
16
);
mpz_set_str
(
signature
.
s
,
"21ad0abb27bd3c21166cb96aef70c0dbd5f3079cab0dd543d4125bd1"
,
16
);
test_dsa_verify
(
&
pub
,
&
nettle_sha224
,
test_dsa_verify
(
params
,
pub
.
y
,
&
nettle_sha224
,
SHEX
(
"e920fc1610718f2b0213d301c0092a51f3c6b0107bbbd824"
"3a9689c044e2d142f202d9d195a5faef4be5acadc9ff6f7d"
"2261e58b517139bcb9489b110423c2e59eb181294ffdae8a"
...
...
@@ -369,7 +370,7 @@ test_main(void)
"9c5fa46879ddaf5c14f07dfb5320715f67a6fec179e3ad53342fb6d1"
,
16
);
mpz_set_str
(
signature
.
s
,
"c3e17e7b3c4d0ac8d49f4dd0f04c16a094f42da0afcc6c90f5f1bbc8"
,
16
);
test_dsa_verify
(
&
pub
,
&
nettle_sha256
,
test_dsa_verify
(
params
,
pub
.
y
,
&
nettle_sha256
,
SHEX
(
"cec8d2843dee7cb5f9119b75562585e05c5ce2f4e6457e9b"
"cc3c1c781ccd2c0442b6282aea610f7161dcede176e77486"
"1f7d2691be6c894ac3ebf80c0fab21e52a3e63ae0b350257"
...
...
@@ -424,7 +425,7 @@ test_main(void)
mpz_set_str
(
signature
.
s
,
"4916d91b2927294e429d537c06dd2463d1845018cca2873e"
"90a6c837b445fdde"
,
16
);
test_dsa_verify
(
&
pub
,
&
nettle_sha1
,
test_dsa_verify
(
params
,
pub
.
y
,
&
nettle_sha1
,
SHEX
(
"de3605dbefde353cbe05e0d6098647b6d041460dfd4c0003"
"12be1afe7551fd3b93fed76a9763c34e004564b8f7dcacbd"
"99e85030632c94e9b0a032046523b7aacdf934a2dbbdcfce"
...
...
@@ -479,7 +480,7 @@ test_main(void)
mpz_set_str
(
signature
.
s
,
"4bd41c84a724cc86e4f0194ec0fbf379e654d0d7f6a1f08b"
"d468139422a5c353"
,
16
);
test_dsa_verify
(
&
pub
,
&
nettle_sha224
,
test_dsa_verify
(
params
,
pub
.
y
,
&
nettle_sha224
,
SHEX
(
"39f2d8d503aae8cd17854456ecfad49a18900d4375412bc6"
"89181ed9c2ccafea98dca689a72dc75e5367d3d3abfc2169"
"700d5891cff70f69d9aca093b061b9f5057f94636bc27831"
...
...
@@ -534,7 +535,7 @@ test_main(void)
mpz_set_str
(
signature
.
s
,
"2bbf68317660ec1e4b154915027b0bc00ee19cfc0bf75d01"
"930504f2ce10a8b0"
,
16
);
test_dsa_verify
(
&
pub
,
&
nettle_sha256
,
test_dsa_verify
(
params
,
pub
.
y
,
&
nettle_sha256
,
SHEX
(
"4e3a28bcf90d1d2e75f075d9fbe55b36c5529b17bc3a9cca"
"ba6935c9e20548255b3dfae0f91db030c12f2c344b3a29c4"
"151c5b209f5e319fdf1c23b190f64f1fe5b330cb7c8fa952"
...
...
@@ -589,7 +590,7 @@ test_main(void)
mpz_set_str
(
signature
.
s
,
"5f56869cee7bf64fec5d5d6ea15bb1fa1169003a87eccc16"
"21b90a1b892226f2"
,
16
);
test_dsa_verify
(
&
pub
,
&
nettle_sha384
,
test_dsa_verify
(
params
,
pub
.
y
,
&
nettle_sha384
,
SHEX
(
"8c78cffdcf25d8230b835b30512684c9b252115870b603d1"
"b4ba2eb5d35b33f26d96b684126ec34fff67dfe5c8c856ac"
"fe3a9ff45ae11d415f30449bcdc3bf9a9fb5a7e48afeaba6"
...
...
@@ -659,7 +660,7 @@ test_main(void)
mpz_set_str
(
signature
.
s
,
"73e48b77a3aa44307483c2dd895cb51db2112177c185c59c"
"b1dcff32fda02a4f"
,
16
);
test_dsa_verify
(
&
pub
,
&
nettle_sha1
,
test_dsa_verify
(
params
,
pub
.
y
,
&
nettle_sha1
,
SHEX
(
"ca84af5c9adbc0044db00d7acfb1b493aab0388ffbad47b3"
"8cd3e9e3111cfe2cda2a45f751c46862f05bdcec4b698adf"
"d2e1606e484c3be4ac0c379d4fbc7c2cda43e922811d7f6c"
...
...
@@ -729,7 +730,7 @@ test_main(void)
mpz_set_str
(
signature
.
s
,
"49f3a74e953e77a7941af3aefeef4ed499be209976a0edb3"
"fa5e7cb961b0c112"
,
16
);
test_dsa_verify
(
&
pub
,
&
nettle_sha256
,
test_dsa_verify
(
params
,
pub
.
y
,
&
nettle_sha256
,
SHEX
(
"cb06e02234263c22b80e832d6dc5a1bee5ea8af3bc2da752"
"441c04027f176158bfe68372bd67f84d489c0d49b07d4025"
"962976be60437be1a2d01d3be0992afa5abe0980e26a9da4"
...
...
@@ -799,7 +800,7 @@ test_main(void)
mpz_set_str
(
signature
.
s
,
"3dae01154ecff7b19007a953f185f0663ef7f2537f0b15e0"
"4fb343c961f36de2"
,
16
);
test_dsa_verify
(
&
pub
,
&
nettle_sha384
,
test_dsa_verify
(
params
,
pub
.
y
,
&
nettle_sha384
,
SHEX
(
"ed9a64d3109ef8a9292956b946873ca4bd887ce624b81be8"
"1b82c69c67aaddf5655f70fe4768114db2834c71787f858e"
"5165da1a7fa961d855ad7e5bc4b7be31b97dbe770798ef79"
...
...
@@ -868,7 +869,7 @@ test_main(void)
mpz_set_str
(
signature
.
s
,
"6478050977ec585980454e0a2f26a03037b921ca588a78a4"
"daff7e84d49a8a6c"
,
16
);
test_dsa_verify
(
&
pub
,
&
nettle_sha512
,
test_dsa_verify
(
params
,
pub
.
y
,
&
nettle_sha512
,
SHEX
(
"494180eed0951371bbaf0a850ef13679df49c1f13fe3770b"
"6c13285bf3ad93dc4ab018aab9139d74200808e9c55bf883"
"00324cc697efeaa641d37f3acf72d8c97bff0182a35b9401"
...
...
testsuite/testutils.c
View file @
39ea0d27
...
...
@@ -1184,7 +1184,8 @@ test_dsa_sign(const struct dsa_public_key *pub,
#endif
void
test_dsa_verify
(
const
struct
dsa_public_key
*
pub
,
test_dsa_verify
(
const
struct
dsa_params
*
params
,
const
mpz_t
pub
,
const
struct
nettle_hash
*
hash
,
struct
tstring
*
msg
,
const
struct
dsa_signature
*
ref
)
...
...
@@ -1203,17 +1204,20 @@ test_dsa_verify(const struct dsa_public_key *pub,
mpz_set
(
signature
.
r
,
ref
->
r
);
mpz_set
(
signature
.
s
,
ref
->
s
);
ASSERT
(
dsa_verify
(
pub
,
hash
->
digest_size
,
digest
,
&
signature
));
ASSERT
(
dsa_verify
(
params
,
pub
,
hash
->
digest_size
,
digest
,
&
signature
));
/* Try bad signature */
mpz_combit
(
signature
.
r
,
17
);
ASSERT
(
!
dsa_verify
(
pub
,
hash
->
digest_size
,
digest
,
ASSERT
(
!
dsa_verify
(
params
,
pub
,
hash
->
digest_size
,
digest
,
&
signature
));
/* Try bad data */
digest
[
hash
->
digest_size
/
2
-
1
]
^=
8
;
ASSERT
(
!
dsa_verify
(
pub
,
hash
->
digest_size
,
digest
,
ASSERT
(
!
dsa_verify
(
params
,
pub
,
hash
->
digest_size
,
digest
,
ref
));
free
(
ctx
);
...
...
@@ -1222,32 +1226,33 @@ test_dsa_verify(const struct dsa_public_key *pub,
}
void
test_dsa_key
(
struct
dsa_public_key
*
pub
,
struct
dsa_private_key
*
key
,
test_dsa_key
(
const
struct
dsa_params
*
params
,
const
mpz_t
pub
,
const
mpz_t
key
,
unsigned
q_size
)
{
mpz_t
t
;
mpz_init
(
t
);
ASSERT
(
mpz_sizeinbase
(
p
ub
->
q
,
2
)
==
q_size
);
ASSERT
(
mpz_sizeinbase
(
p
ub
->
p
,
2
)
>=
DSA_SHA1_MIN_P_BITS
);
ASSERT
(
mpz_sizeinbase
(
p
arams
->
q
,
2
)
==
q_size
);
ASSERT
(
mpz_sizeinbase
(
p
arams
->
p
,
2
)
>=
DSA_SHA1_MIN_P_BITS
);
ASSERT
(
mpz_probab_prime_p
(
p
ub
->
p
,
10
));
ASSERT
(
mpz_probab_prime_p
(
p
arams
->
p
,
10
));
ASSERT
(
mpz_probab_prime_p
(
p
ub
->
q
,
10
));
ASSERT
(
mpz_probab_prime_p
(
p
arams
->
q
,
10
));
mpz_fdiv_r
(
t
,
p
ub
->
p
,
p
ub
->
q
);
mpz_fdiv_r
(
t
,
p
arams
->
p
,
p
arams
->
q
);
ASSERT
(
0
==
mpz_cmp_ui
(
t
,
1
));
ASSERT
(
mpz_cmp_ui
(
p
ub
->
g
,
1
)
>
0
);
ASSERT
(
mpz_cmp_ui
(
p
arams
->
g
,
1
)
>
0
);
mpz_powm
(
t
,
p
ub
->
g
,
p
ub
->
q
,
p
ub
->
p
);
mpz_powm
(
t
,
p
arams
->
g
,
p
arams
->
q
,
p
arams
->
p
);
ASSERT
(
0
==
mpz_cmp_ui
(
t
,
1
));
mpz_powm
(
t
,
p
ub
->
g
,
key
->
x
,
pub
->
p
);
ASSERT
(
0
==
mpz_cmp
(
t
,
pub
->
y
));
mpz_powm
(
t
,
p
arams
->
g
,
key
,
params
->
p
);
ASSERT
(
0
==
mpz_cmp
(
t
,
pub
));
mpz_clear
(
t
);
}
...
...
testsuite/testutils.h
View file @
39ea0d27
...
...
@@ -205,14 +205,16 @@ test_dsa_sign(const struct dsa_public_key *pub,
const
struct
dsa_signature
*
expected
);
void
test_dsa_verify
(
const
struct
dsa_public_key
*
pub
,
test_dsa_verify
(
const
struct
dsa_params
*
params
,
const
mpz_t
pub
,
const
struct
nettle_hash
*
hash
,
struct
tstring
*
msg
,
const
struct
dsa_signature
*
ref
);
void
test_dsa_key
(
struct
dsa_public_key
*
pub
,
struct
dsa_private_key
*
key
,
test_dsa_key
(
const
struct
dsa_params
*
params
,
const
mpz_t
pub
,
const
mpz_t
key
,
unsigned
q_size
);
extern
const
struct
ecc_curve
*
const
ecc_curves
[];
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment