You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
3.5 KiB
94 lines
3.5 KiB
14 years ago
|
//////////////////////////////////////////////////////////////////////////////////
|
||
|
// Name: actTools.h
|
||
|
// Product: cv act library
|
||
|
// Purpose: useful global functions
|
||
|
//
|
||
|
// Copyright: (c) 2000 cv cryptovision GmbH
|
||
|
// all rights reserved
|
||
|
// Licence: The conditions for the use of this software are regulated
|
||
|
// in the cv act library licence agreement.
|
||
|
//////////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#ifndef ACT_Tools_h
|
||
|
#define ACT_Tools_h
|
||
|
|
||
|
#include "actMode.h"
|
||
|
#include "actBlob.h"
|
||
|
|
||
|
namespace act
|
||
|
{
|
||
|
class IKey;
|
||
|
|
||
|
// Functions for RSA public key and private key operation.
|
||
|
// Both functions return the plain result of the modular
|
||
|
// exponentiation using the public or private exponent.
|
||
|
//
|
||
|
// 1) Calculate m^e mod n, where e is the public exponent
|
||
|
Blob RSAPublicKeyOperation(IKey* rsa_key, const Blob& m);
|
||
|
// 2) Calculate c^d mod n, where d is the private exponent
|
||
|
Blob RSAPrivateKeyOperation(IKey* rsa_key, const Blob& c);
|
||
|
|
||
|
|
||
|
// Function for PKCS#3 Diffie-Hellman.
|
||
|
// The function initializes an act::IKey Diffie-Hellman key object
|
||
|
// from PKCS#3 DH parameters p and g (prime and generator).
|
||
|
void PKCS3DHKeyToDHKey(const Blob& prime, const Blob& generator, IKey *dhKey);
|
||
|
|
||
|
|
||
|
// Read pfx file and get private key
|
||
|
Blob getPKCS8Key(const Blob& pfx_data, const char* password);
|
||
|
// Read pfx file and get the own (user) certificate
|
||
|
Blob getOwnCertificateFromPfx(const Blob& pfx_data, const char* password);
|
||
|
|
||
|
|
||
|
// Function to encode an ASN1 object identifier in binary form
|
||
|
// example EncodeOID("0.2.262.1.10.1.3.8") = { 0x02, 0x82, 0x06, 0x01, 0x0A, 0x01, 0x03, 0x08 }
|
||
|
Blob EncodeOID(const char* oid);
|
||
|
|
||
|
|
||
|
// Converts a signed decimal number or hexadecimal number (with prefix "0x" / "-0x")
|
||
|
// into a Blob (Twos-Complement representation for negative numbers)
|
||
|
Blob EncodeNumber(const char* number);
|
||
|
Blob EncodeNumber(int number);
|
||
|
|
||
|
|
||
|
// CRC functions
|
||
|
|
||
|
// CRC-16 (direct mode, no zero bit augmentation)
|
||
|
//
|
||
|
// Poly : 0x8005 (x^16 + x^15 + x^2 + 1)
|
||
|
// RefIn : True (bit reflection on the input bytes)
|
||
|
// RefOut : True (bit reflection on the final CRC value)
|
||
|
// XorOut : 0x0000 (no XOR on the returned CRC value)
|
||
|
unsigned long CalculateCRC16(const act::byte* message, size_t message_len,
|
||
|
unsigned long crc_init_value = 0x0000);
|
||
|
unsigned long CalculateCRC16(const act::Blob& message,
|
||
|
unsigned long crc_init_value = 0x0000);
|
||
|
|
||
|
// CRC-16 CCIT (direct mode, no zero bit augmentation)
|
||
|
//
|
||
|
// Poly : 0x1021 (x^16 + x^12 + x^5 + 1)
|
||
|
// RefIn : False (no bit reflection on the input bytes)
|
||
|
// RefOut : False (no bit reflection on the final CRC value)
|
||
|
// XorOut : 0x0000 (no XOR on the returned CRC value)
|
||
|
unsigned long CalculateCRC16CCITT(const act::byte* message, size_t message_len,
|
||
|
unsigned long crc_init_value = 0xFFFF);
|
||
|
unsigned long CalculateCRC16CCITT(const act::Blob& message,
|
||
|
unsigned long crc_init_value = 0xFFFF);
|
||
|
|
||
|
// CRC-32 (direct mode, no zero bit augmentation)
|
||
|
//
|
||
|
// Poly : 0x04C11DB7 (x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + ...
|
||
|
// ... + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^ + 1)
|
||
|
// RefIn : True (bit reflection on the input bytes)
|
||
|
// RefOut : True (bit reflection on the final CRC value)
|
||
|
// XorOut : 0xFFFFFFFF (XOR on the returned CRC value)
|
||
|
unsigned long CalculateCRC32(const act::byte* message, size_t message_len,
|
||
|
unsigned long crc_init_value = 0xFFFFFFFF);
|
||
|
unsigned long CalculateCRC32(const act::Blob& message,
|
||
|
unsigned long crc_init_value = 0xFFFFFFFF);
|
||
|
|
||
|
} // namespace act
|
||
|
|
||
|
#endif // ACT_Tools_h
|