* [ABI-Break] Implement EDSP in libapt-pkg so that all front-ends which
[ntk/apt.git] / apt-pkg / contrib / sha2.h
1 // -*- mode: cpp; mode: fold -*-
2 // Description /*{{{*/
3 // $Id: sha512.h,v 1.3 2001/05/07 05:05:47 jgg Exp $
4 /* ######################################################################
5
6 SHA{512,256}SumValue - Storage for a SHA-{512,256} hash.
7 SHA{512,256}Summation - SHA-{512,256} Secure Hash Algorithm.
8
9 This is a C++ interface to a set of SHA{512,256}Sum functions, that mirrors
10 the equivalent MD5 & SHA1 classes.
11
12 ##################################################################### */
13 /*}}}*/
14 #ifndef APTPKG_SHA2_H
15 #define APTPKG_SHA2_H
16
17 #include <string>
18 #include <cstring>
19 #include <algorithm>
20 #include <stdint.h>
21
22 #include "sha2_internal.h"
23 #include "hashsum_template.h"
24
25 using std::string;
26 using std::min;
27
28 class SHA512Summation;
29 class SHA256Summation;
30
31 typedef HashSumValue<512> SHA512SumValue;
32 typedef HashSumValue<256> SHA256SumValue;
33
34 class SHA2SummationBase
35 {
36 protected:
37 bool Done;
38 public:
39 virtual bool Add(const unsigned char *inbuf,unsigned long inlen) = 0;
40 virtual bool AddFD(int Fd,unsigned long Size);
41
42 inline bool Add(const char *Data)
43 {
44 return Add((unsigned char *)Data,strlen(Data));
45 };
46 inline bool Add(const unsigned char *Beg,const unsigned char *End)
47 {
48 return Add(Beg,End-Beg);
49 };
50 void Result();
51 };
52
53 class SHA256Summation : public SHA2SummationBase
54 {
55 SHA256_CTX ctx;
56 unsigned char Sum[32];
57
58 public:
59 virtual bool Add(const unsigned char *inbuf, unsigned long len)
60 {
61 if (Done)
62 return false;
63 SHA256_Update(&ctx, inbuf, len);
64 return true;
65 };
66 SHA256SumValue Result()
67 {
68 if (!Done) {
69 SHA256_Final(Sum, &ctx);
70 Done = true;
71 }
72 SHA256SumValue res;
73 res.Set(Sum);
74 return res;
75 };
76 SHA256Summation()
77 {
78 SHA256_Init(&ctx);
79 Done = false;
80 };
81 };
82
83 class SHA512Summation : public SHA2SummationBase
84 {
85 SHA512_CTX ctx;
86 unsigned char Sum[64];
87
88 public:
89 virtual bool Add(const unsigned char *inbuf, unsigned long len)
90 {
91 if (Done)
92 return false;
93 SHA512_Update(&ctx, inbuf, len);
94 return true;
95 };
96 SHA512SumValue Result()
97 {
98 if (!Done) {
99 SHA512_Final(Sum, &ctx);
100 Done = true;
101 }
102 SHA512SumValue res;
103 res.Set(Sum);
104 return res;
105 };
106 SHA512Summation()
107 {
108 SHA512_Init(&ctx);
109 Done = false;
110 };
111 };
112
113
114 #endif