Where Online Learning is simpler!
The C and C++ Include Header Files
cat -n /usr/include/nodejs/src/crypto/crypto_rsa.h
1 #ifndef SRC_CRYPTO_CRYPTO_RSA_H_ 2 #define SRC_CRYPTO_CRYPTO_RSA_H_ 3 4 #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS 5 6 #include "crypto/crypto_cipher.h" 7 #include "crypto/crypto_keygen.h" 8 #include "crypto/crypto_keys.h" 9 #include "crypto/crypto_util.h" 10 #include "env.h" 11 #include "memory_tracker.h" 12 #include "v8.h" 13 14 namespace node { 15 namespace crypto { 16 enum RSAKeyVariant { 17 kKeyVariantRSA_SSA_PKCS1_v1_5, 18 kKeyVariantRSA_PSS, 19 kKeyVariantRSA_OAEP 20 }; 21 22 struct RsaKeyPairParams final : public MemoryRetainer { 23 RSAKeyVariant variant; 24 unsigned int modulus_bits; 25 unsigned int exponent; 26 27 // The following options are used for RSA-PSS. If any of them are set, a 28 // RSASSA-PSS-params sequence will be added to the key. 29 const EVP_MD* md = nullptr; 30 const EVP_MD* mgf1_md = nullptr; 31 int saltlen = -1; 32 33 SET_NO_MEMORY_INFO() 34 SET_MEMORY_INFO_NAME(RsaKeyPairParams) 35 SET_SELF_SIZE(RsaKeyPairParams) 36 }; 37 38 using RsaKeyPairGenConfig = KeyPairGenConfig<RsaKeyPairParams>; 39 40 struct RsaKeyGenTraits final { 41 using AdditionalParameters = RsaKeyPairGenConfig; 42 static constexpr const char* JobName = "RsaKeyPairGenJob"; 43 44 static ncrypto::EVPKeyCtxPointer Setup(RsaKeyPairGenConfig* params); 45 46 static v8::Maybe<void> AdditionalConfig( 47 CryptoJobMode mode, 48 const v8::FunctionCallbackInfo<v8::Value>& args, 49 unsigned int* offset, 50 RsaKeyPairGenConfig* params); 51 }; 52 53 using RSAKeyPairGenJob = KeyGenJob<KeyPairGenTraits<RsaKeyGenTraits>>; 54 55 struct RSAKeyExportConfig final : public MemoryRetainer { 56 RSAKeyVariant variant = kKeyVariantRSA_SSA_PKCS1_v1_5; 57 SET_NO_MEMORY_INFO() 58 SET_MEMORY_INFO_NAME(RSAKeyExportConfig) 59 SET_SELF_SIZE(RSAKeyExportConfig) 60 }; 61 62 struct RSAKeyExportTraits final { 63 static constexpr const char* JobName = "RSAKeyExportJob"; 64 using AdditionalParameters = RSAKeyExportConfig; 65 66 static v8::Maybe<void> AdditionalConfig( 67 const v8::FunctionCallbackInfo<v8::Value>& args, 68 unsigned int offset, 69 RSAKeyExportConfig* config); 70 71 static WebCryptoKeyExportStatus DoExport(const KeyObjectData& key_data, 72 WebCryptoKeyFormat format, 73 const RSAKeyExportConfig& params, 74 ByteSource* out); 75 }; 76 77 using RSAKeyExportJob = KeyExportJob<RSAKeyExportTraits>; 78 79 struct RSACipherConfig final : public MemoryRetainer { 80 CryptoJobMode mode = kCryptoJobAsync; 81 ByteSource label; 82 int padding = 0; 83 const EVP_MD* digest = nullptr; 84 85 RSACipherConfig() = default; 86 87 RSACipherConfig(RSACipherConfig&& other) noexcept; 88 89 void MemoryInfo(MemoryTracker* tracker) const override; 90 SET_MEMORY_INFO_NAME(RSACipherConfig) 91 SET_SELF_SIZE(RSACipherConfig) 92 }; 93 94 struct RSACipherTraits final { 95 static constexpr const char* JobName = "RSACipherJob"; 96 using AdditionalParameters = RSACipherConfig; 97 98 static v8::Maybe<void> AdditionalConfig( 99 CryptoJobMode mode, 100 const v8::FunctionCallbackInfo<v8::Value>& args, 101 unsigned int offset, 102 WebCryptoCipherMode cipher_mode, 103 RSACipherConfig* config); 104 105 static WebCryptoCipherStatus DoCipher(Environment* env, 106 const KeyObjectData& key_data, 107 WebCryptoCipherMode cipher_mode, 108 const RSACipherConfig& params, 109 const ByteSource& in, 110 ByteSource* out); 111 }; 112 113 using RSACipherJob = CipherJob<RSACipherTraits>; 114 115 v8::Maybe<void> ExportJWKRsaKey(Environment* env, 116 const KeyObjectData& key, 117 v8::Local<v8::Object> target); 118 119 KeyObjectData ImportJWKRsaKey(Environment* env, 120 v8::Local<v8::Object> jwk, 121 const v8::FunctionCallbackInfo<v8::Value>& args, 122 unsigned int offset); 123 124 v8::Maybe<void> GetRsaKeyDetail(Environment* env, 125 const KeyObjectData& key, 126 v8::Local<v8::Object> target); 127 128 namespace RSAAlg { 129 void Initialize(Environment* env, v8::Local<v8::Object> target); 130 void RegisterExternalReferences(ExternalReferenceRegistry* registry); 131 } // namespace RSAAlg 132 } // namespace crypto 133 } // namespace node 134 135 #endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS 136 #endif // SRC_CRYPTO_CRYPTO_RSA_H_