crypto:dss_sign() fails with bad argument
Kaiduan Xie
kaiduanx@REDACTED
Sat May 8 01:18:09 CEST 2010
Hi,
I am playing with erlang's crypto module for DSS sign/verification,
and encountered the following failure,
kaiduanx@REDACTED:~/test$ erl
Erlang (BEAM) emulator version 5.6.5 [source] [async-threads:0] [hipe]
[kernel-poll:false]
Eshell V5.6.5 (abort with ^G)
1> {ok, [Key1]} = public_key:pem_to_der("./privkey.pem").
{ok,[{dsa_private_key,<<48,130,3,61,2,1,0,2,130,1,1,0,130,
155,217,13,154,35,30,61,35,193,
177,89,...>>,
not_encrypted}]}
2> {ok, DSAPrivKey} = public_key:decode_private_key(Key1).
{ok,{'DSAPrivateKey',0,
16487831091520780258476244829269954905068453299919937468122754367555025389255228167104813916584427117132491697333745898571447582288126735030379964082170022817274086858448078061001221776403199146387597678984540700662102497749323871708629057309007645527617512892347216241068519054813731565592382595863130859729188869666097096597640296820469239977991443749290028015703576616678053020176398097226185345390078018458880065671569994747328759201284973167049924181380228215122295761433727402740292339377060448621018652887515687347119246401586369278290721630262294672892581614282203303348001277520129700110248972612083036183823,
1069445346270440656593824092073657983328499138457,
7214566675159847510543550105259613160453301579561623377843203423614163319395145087833198636004278609701319277802567885081948001327800441061451495445964179176778711411229815801134094069049261847343045298683209010702015484647378262734006939008757875094544682692811028223303902447231625138361611541322285116859770078463180719920891946211261933346941519603064902060705607105259990741513856339667300139111109012511141655066131159463312192937454414940901992301247028509228326669147276129260865537192028595304014436739105124361395299086087865530512935899515885409929656072537826761802885019421821204505764703508239164324041,
7633100674515027235650509950891694304003982881440195652180376335259908594946224965667327027587338158513959931360517774019595393102978917235479651037021972646784210191530035858681332371458695842841098509902898010434270664893194727388258476377361344595538044057461379480170807524999310663741254536687833627343418977980237734999549443057990979136155378902597245536582084684912096597468826612905623557372778470587564770314993903695513057146844763692020381754294541184291650680501093631643506634398260717309523197216269415879496293970907691201898118313013181084633883085546050181063797462116224600567526013743839898981226,
495667775549172824486294937719319801999514557700}}
3> {_, 0, P, Q, G, Y, X} = DSAPrivKey.
{'DSAPrivateKey',0,
16487831091520780258476244829269954905068453299919937468122754367555025389255228167104813916584427117132491697333745898571447582288126735030379964082170022817274086858448078061001221776403199146387597678984540700662102497749323871708629057309007645527617512892347216241068519054813731565592382595863130859729188869666097096597640296820469239977991443749290028015703576616678053020176398097226185345390078018458880065671569994747328759201284973167049924181380228215122295761433727402740292339377060448621018652887515687347119246401586369278290721630262294672892581614282203303348001277520129700110248972612083036183823,
1069445346270440656593824092073657983328499138457,
7214566675159847510543550105259613160453301579561623377843203423614163319395145087833198636004278609701319277802567885081948001327800441061451495445964179176778711411229815801134094069049261847343045298683209010702015484647378262734006939008757875094544682692811028223303902447231625138361611541322285116859770078463180719920891946211261933346941519603064902060705607105259990741513856339667300139111109012511141655066131159463312192937454414940901992301247028509228326669147276129260865537192028595304014436739105124361395299086087865530512935899515885409929656072537826761802885019421821204505764703508239164324041,
7633100674515027235650509950891694304003982881440195652180376335259908594946224965667327027587338158513959931360517774019595393102978917235479651037021972646784210191530035858681332371458695842841098509902898010434270664893194727388258476377361344595538044057461379480170807524999310663741254536687833627343418977980237734999549443057990979136155378902597245536582084684912096597468826612905623557372778470587564770314993903695513057146844763692020381754294541184291650680501093631643506634398260717309523197216269415879496293970907691201898118313013181084633883085546050181063797462116224600567526013743839898981226,
495667775549172824486294937719319801999514557700}
4>
4> crypto:start().
ok
5> crypto:dss_sign(list_to_binary("Welcome to erlang land"),
[crypto:mpint(P), crypto:mpint(Q), crypto:mpint(G), crypto:mpint(X)]).
** exception error: bad argument
in function port_control/3
called as port_control(crypto_drv02,38,
[<<"Welcome to erlang land">>,
[<<0,0,1,1,0,130,155,217,13,154,35,30,61,35,
193,177,89,67,155,111,87,191,198,...>>,
<<0,0,0,21,0,187,83,150,127,162,157,203,222,
11,119,150,240,120,83,23,248,64,...>>,
<<0,0,1,0,57,38,127,21,93,84,216,239,141,178,
131,95,23,15,1,197,166,...>>,
<<0,0,0,20,86,210,131,3,27,84,85,4,140,24,
92,36,218,245,126,21,...>>]])
in call from crypto:control/2
in call from crypto:dss_sign/2
6> crypto:dss_sign(list_to_binary("Welcome to erlang land"), [P, Q, G,
X]). ** exception error: bad argument
in function port_control/3
called as port_control(crypto_drv02,38,
[<<"Welcome to erlang land">>,
[16487831091520780258476244829269954905068453299919937468122754367555025389255228167104813916584427117132491697333745898571447582288126735030379964082170022817274086858448078061001221776403199146387597678984540700662102497749323871708629057309007645527617512892347216241068519054813731565592382595863130859729188869666097096597640296820469239977991443749290028015703576616678053020176398097226185345390078018458880065671569994747328759201284973167049924181380228215122295761433727402740292339377060448621018652887515687347119246401586369278290721630262294672892581614282203303348001277520129700110248972612083036183823,
1069445346270440656593824092073657983328499138457,
7214566675159847510543550105259613160453301579561623377843203423614163319395145087833198636004278609701319277802567885081948001327800441061451495445964179176778711411229815801134094069049261847343045298683209010702015484647378262734006939008757875094544682692811028223303902447231625138361611541322285116859770078463180719920891946211261933346941519603064902060705607105259990741513856339667300139111109012511141655066131159463312192937454414940901992301247028509228326669147276129260865537192028595304014436739105124361395299086087865530512935899515885409929656072537826761802885019421821204505764703508239164324041,
495667775549172824486294937719319801999514557700]])
in call from crypto:control/2
in call from crypto:dss_sign/2
7>
9> crypto:info_lib().
[{<<"OpenSSL">>,9470079,<<"OpenSSL 0.9.8g 19 Oct 2007">>}]
The privkey.pem is generated by openssl as below,
openssl dsaparam -out dsaparam.pem 2048
openssl gendsa -out privkey.pem dsaparam.pem
Can someone point out what is going wrong? Thanks for help,
Kaiduan
More information about the erlang-questions
mailing list