source: trunk/src-cryptopp/dsa.cpp

Last change on this file was e230cb0, checked in by David Stainton <dstainton415@…>, at 2016-10-12T13:27:29Z

Add cryptopp from tag CRYPTOPP_5_6_5

  • Property mode set to 100644
File size: 1.2 KB
Line 
1// dsa.cpp - written and placed in the public domain by Wei Dai
2
3#include "pch.h"
4
5#ifndef CRYPTOPP_IMPORTS
6
7#include "dsa.h"
8#include "asn.h"
9#include "integer.h"
10#include "filters.h"
11#include "nbtheory.h"
12
13NAMESPACE_BEGIN(CryptoPP)
14
15size_t DSAConvertSignatureFormat(byte *buffer, size_t bufferSize, DSASignatureFormat toFormat, const byte *signature, size_t signatureLen, DSASignatureFormat fromFormat)
16{
17        Integer r, s;
18        StringStore store(signature, signatureLen);
19        ArraySink sink(buffer, bufferSize);
20
21        switch (fromFormat)
22        {
23        case DSA_P1363:
24                r.Decode(store, signatureLen/2);
25                s.Decode(store, signatureLen/2);
26                break;
27        case DSA_DER:
28        {
29                BERSequenceDecoder seq(store);
30                r.BERDecode(seq);
31                s.BERDecode(seq);
32                seq.MessageEnd();
33                break;
34        }
35        case DSA_OPENPGP:
36                r.OpenPGPDecode(store);
37                s.OpenPGPDecode(store);
38                break;
39        }
40
41        switch (toFormat)
42        {
43        case DSA_P1363:
44                r.Encode(sink, bufferSize/2);
45                s.Encode(sink, bufferSize/2);
46                break;
47        case DSA_DER:
48        {
49                DERSequenceEncoder seq(sink);
50                r.DEREncode(seq);
51                s.DEREncode(seq);
52                seq.MessageEnd();
53                break;
54        }
55        case DSA_OPENPGP:
56                r.OpenPGPEncode(sink);
57                s.OpenPGPEncode(sink);
58                break;
59        }
60
61        return (size_t)sink.TotalPutLength();
62}
63
64NAMESPACE_END
65
66#endif
Note: See TracBrowser for help on using the repository browser.