apt @VERSION@

sha1.h

00001 // -*- mode: cpp; mode: fold -*-
00002 // Description                                                          /*{{{*/
00003 // $Id: sha1.h,v 1.3 2001/05/07 05:05:47 jgg Exp $
00004 /* ######################################################################
00005 
00006    SHA1SumValue - Storage for a SHA-1 hash.
00007    SHA1Summation - SHA-1 Secure Hash Algorithm.
00008    
00009    This is a C++ interface to a set of SHA1Sum functions, that mirrors
00010    the equivalent MD5 classes. 
00011 
00012    ##################################################################### */
00013                                                                         /*}}}*/
00014 #ifndef APTPKG_SHA1_H
00015 #define APTPKG_SHA1_H
00016 
00017 #include <string>
00018 #include <cstring>
00019 #include <algorithm>
00020 
00021 using std::string;
00022 using std::min;
00023 
00024 class SHA1Summation;
00025 
00026 class SHA1SumValue
00027 {
00028    friend class SHA1Summation;
00029    unsigned char Sum[20];
00030    
00031    public:
00032 
00033    // Accessors
00034    bool operator ==(const SHA1SumValue &rhs) const; 
00035    string Value() const;
00036    inline void Value(unsigned char S[20])
00037          {for (int I = 0; I != sizeof(Sum); I++) S[I] = Sum[I];};
00038    inline operator string() const {return Value();};
00039    bool Set(string Str);
00040    inline void Set(unsigned char S[20]) 
00041          {for (int I = 0; I != sizeof(Sum); I++) Sum[I] = S[I];};
00042 
00043    SHA1SumValue(string Str);
00044    SHA1SumValue();
00045 };
00046 
00047 class SHA1Summation
00048 {
00049    /* assumes 64-bit alignment just in case */
00050    unsigned char Buffer[64] __attribute__((aligned(8)));
00051    unsigned char State[5*4] __attribute__((aligned(8)));
00052    unsigned char Count[2*4] __attribute__((aligned(8)));
00053    bool Done;
00054    
00055    public:
00056 
00057    bool Add(const unsigned char *inbuf,unsigned long inlen);
00058    inline bool Add(const char *Data) {return Add((unsigned char *)Data,strlen(Data));};
00059    bool AddFD(int Fd,unsigned long Size);
00060    inline bool Add(const unsigned char *Beg,const unsigned char *End) 
00061                   {return Add(Beg,End-Beg);};
00062    SHA1SumValue Result();
00063    
00064    SHA1Summation();
00065 };
00066 
00067 #endif