Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
folium-app
GitHub Repository: folium-app/Folium
Path: blob/a-new-beginning/SharedDependencies/Sources/cryptopp/dsa.cpp
2 views
1
// dsa.cpp - originally 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
13
NAMESPACE_BEGIN(CryptoPP)
14
15
size_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
64
NAMESPACE_END
65
66
#endif
67
68