summaryrefslogtreecommitdiffstats
path: root/lib/cryptopp/dsa.cpp
diff options
context:
space:
mode:
authorworktycho <work.tycho@gmail.com>2013-12-09 18:51:12 +0100
committerworktycho <work.tycho@gmail.com>2013-12-09 18:51:12 +0100
commit843605d59ebc128be0a578dc6f45ef8c05da6e79 (patch)
tree3ffebc6ba27baf7a9e1d4bc51501ffeea9b14226 /lib/cryptopp/dsa.cpp
parentmerged makefile changes (diff)
parentFix Undefined behavior at Bindings/LuaWindow line 32 (diff)
downloadcuberite-843605d59ebc128be0a578dc6f45ef8c05da6e79.tar
cuberite-843605d59ebc128be0a578dc6f45ef8c05da6e79.tar.gz
cuberite-843605d59ebc128be0a578dc6f45ef8c05da6e79.tar.bz2
cuberite-843605d59ebc128be0a578dc6f45ef8c05da6e79.tar.lz
cuberite-843605d59ebc128be0a578dc6f45ef8c05da6e79.tar.xz
cuberite-843605d59ebc128be0a578dc6f45ef8c05da6e79.tar.zst
cuberite-843605d59ebc128be0a578dc6f45ef8c05da6e79.zip
Diffstat (limited to 'lib/cryptopp/dsa.cpp')
-rw-r--r--lib/cryptopp/dsa.cpp63
1 files changed, 63 insertions, 0 deletions
diff --git a/lib/cryptopp/dsa.cpp b/lib/cryptopp/dsa.cpp
new file mode 100644
index 000000000..5aace4857
--- /dev/null
+++ b/lib/cryptopp/dsa.cpp
@@ -0,0 +1,63 @@
+// dsa.cpp - written and placed in the public domain by Wei Dai
+
+#include "pch.h"
+
+#ifndef CRYPTOPP_IMPORTS
+
+#include "dsa.h"
+#include "nbtheory.h"
+
+NAMESPACE_BEGIN(CryptoPP)
+
+size_t DSAConvertSignatureFormat(byte *buffer, size_t bufferSize, DSASignatureFormat toFormat, const byte *signature, size_t signatureLen, DSASignatureFormat fromFormat)
+{
+ Integer r, s;
+ StringStore store(signature, signatureLen);
+ ArraySink sink(buffer, bufferSize);
+
+ switch (fromFormat)
+ {
+ case DSA_P1363:
+ r.Decode(store, signatureLen/2);
+ s.Decode(store, signatureLen/2);
+ break;
+ case DSA_DER:
+ {
+ BERSequenceDecoder seq(store);
+ r.BERDecode(seq);
+ s.BERDecode(seq);
+ seq.MessageEnd();
+ break;
+ }
+ case DSA_OPENPGP:
+ r.OpenPGPDecode(store);
+ s.OpenPGPDecode(store);
+ break;
+ }
+
+ switch (toFormat)
+ {
+ case DSA_P1363:
+ r.Encode(sink, bufferSize/2);
+ s.Encode(sink, bufferSize/2);
+ break;
+ case DSA_DER:
+ {
+ DERSequenceEncoder seq(sink);
+ r.DEREncode(seq);
+ s.DEREncode(seq);
+ seq.MessageEnd();
+ break;
+ }
+ case DSA_OPENPGP:
+ r.OpenPGPEncode(sink);
+ s.OpenPGPEncode(sink);
+ break;
+ }
+
+ return (size_t)sink.TotalPutLength();
+}
+
+NAMESPACE_END
+
+#endif