diff --git a/libfreerdp-core/crypto.c b/libfreerdp-core/crypto.c index 046fa9562..e9a5f63b5 100644 --- a/libfreerdp-core/crypto.c +++ b/libfreerdp-core/crypto.c @@ -188,6 +188,34 @@ exit: return status; } +/* + * Terminal Services Signing Keys. + * Yes, Terminal Services Private Key is publically available. + */ +const uint8 tssk_modulus[] = { + 0x3d, 0x3a, 0x5e, 0xbd, 0x72, 0x43, 0x3e, 0xc9, + 0x4d, 0xbb, 0xc1, 0x1e, 0x4a, 0xba, 0x5f, 0xcb, + 0x3e, 0x88, 0x20, 0x87, 0xef, 0xf5, 0xc1, 0xe2, + 0xd7, 0xb7, 0x6b, 0x9a, 0xf2, 0x52, 0x45, 0x95, + 0xce, 0x63, 0x65, 0x6b, 0x58, 0x3a, 0xfe, 0xef, + 0x7c, 0xe7, 0xbf, 0xfe, 0x3d, 0xf6, 0x5c, 0x7d, + 0x6c, 0x5e, 0x06, 0x09, 0x1a, 0xf5, 0x61, 0xbb, + 0x20, 0x93, 0x09, 0x5f, 0x05, 0x6d, 0xea, 0x87 +}; +const uint8 tssk_privateExponent[] = { + 0x87, 0xa7, 0x19, 0x32, 0xda, 0x11, 0x87, 0x55, + 0x58, 0x00, 0x16, 0x16, 0x25, 0x65, 0x68, 0xf8, + 0x24, 0x3e, 0xe6, 0xfa, 0xe9, 0x67, 0x49, 0x94, + 0xcf, 0x92, 0xcc, 0x33, 0x99, 0xe8, 0x08, 0x60, + 0x17, 0x9a, 0x12, 0x9f, 0x24, 0xdd, 0xb1, 0x24, + 0x99, 0xc7, 0x3a, 0xb8, 0x0a, 0x7b, 0x0d, 0xdd, + 0x35, 0x07, 0x79, 0x17, 0x0b, 0x51, 0x9b, 0xb3, + 0xc7, 0x10, 0x01, 0x13, 0xe7, 0x3f, 0xf3, 0x5f +}; +const uint8 tssk_exponent[] = { + 0x5b, 0x7b, 0x88, 0xc0 +}; + void crypto_rsa_encrypt(const uint8* input, int length, uint32 key_length, const uint8* modulus, const uint8* exponent, uint8* output) { BN_CTX* ctx; diff --git a/libfreerdp-core/crypto.h b/libfreerdp-core/crypto.h index f4eab4130..74d48f775 100644 --- a/libfreerdp-core/crypto.h +++ b/libfreerdp-core/crypto.h @@ -120,6 +120,11 @@ boolean x509_verify_cert(CryptoCert cert, rdpSettings* settings); rdpCertData* crypto_get_cert_data(X509* xcert, char* hostname); boolean crypto_cert_get_public_key(CryptoCert cert, rdpBlob* public_key); +#define TSSK_KEY_LENGTH 64 +extern const uint8 tssk_modulus[]; +extern const uint8 tssk_privateExponent[]; +extern const uint8 tssk_exponent[]; + void crypto_rsa_encrypt(const uint8* input, int length, uint32 key_length, const uint8* modulus, const uint8* exponent, uint8* output); void crypto_reverse(uint8* data, int length); void crypto_nonce(uint8* nonce, int size);