Simplify printHash32
This commit is contained in:
		
							parent
							
								
									3688db3d43
								
							
						
					
					
						commit
						db2ec59903
					
				
					 1 changed files with 16 additions and 34 deletions
				
			
		| 
						 | 
				
			
			@ -103,24 +103,6 @@ Hash parseHash(HashType ht, const string & s)
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static unsigned char divMod(unsigned char * bytes, unsigned char y)
 | 
			
		||||
{
 | 
			
		||||
    unsigned int borrow = 0;
 | 
			
		||||
 | 
			
		||||
    int pos = Hash::maxHashSize - 1;
 | 
			
		||||
    while (pos >= 0 && !bytes[pos]) --pos;
 | 
			
		||||
 | 
			
		||||
    for ( ; pos >= 0; --pos) {
 | 
			
		||||
        unsigned int s = bytes[pos] + (borrow << 8);
 | 
			
		||||
        unsigned int d = s / y;
 | 
			
		||||
        borrow = s % y;
 | 
			
		||||
        bytes[pos] = d;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return borrow;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
unsigned int hashLength32(const Hash & hash)
 | 
			
		||||
{
 | 
			
		||||
    return (hash.hashSize * 8 - 1) / 5 + 1;
 | 
			
		||||
| 
						 | 
				
			
			@ -136,19 +118,19 @@ string printHash32(const Hash & hash)
 | 
			
		|||
    Hash hash2(hash);
 | 
			
		||||
    unsigned int len = hashLength32(hash);
 | 
			
		||||
 | 
			
		||||
    const char * chars = base32Chars.data();
 | 
			
		||||
    string s;
 | 
			
		||||
    s.reserve(len);
 | 
			
		||||
 | 
			
		||||
    string s(len, '0');
 | 
			
		||||
 | 
			
		||||
    int pos = len - 1;
 | 
			
		||||
    while (pos >= 0) {
 | 
			
		||||
        unsigned char digit = divMod(hash2.hash, 32);
 | 
			
		||||
        s[pos--] = chars[digit];
 | 
			
		||||
    for (int n = len - 1; n >= 0; n--) {
 | 
			
		||||
        unsigned int b = n * 5;
 | 
			
		||||
        unsigned int i = b / 8;
 | 
			
		||||
        unsigned int j = b % 8;
 | 
			
		||||
        unsigned char c =
 | 
			
		||||
            (hash.hash[i] >> j)
 | 
			
		||||
            | (i >= hash.hashSize - 1 ? 0 : hash.hash[i + 1] << (8 - j));
 | 
			
		||||
        s.push_back(base32Chars[c & 0x1f]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    for (unsigned int i = 0; i < hash2.maxHashSize; ++i)
 | 
			
		||||
        assert(hash2.hash[i] == 0);
 | 
			
		||||
 | 
			
		||||
    return s;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue