A simple Qt based browser with no bullshit that supports PKCS#11 tokens (such as the SuisseID).
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

//////////////////////////////////////////////////////////////////////////////////
// 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