X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=ntsimulator%2Fyang%2Fx-ran%2Fietf-crypto-types.yang;fp=ntsimulator%2Fyang%2Fx-ran%2Fietf-crypto-types.yang;h=c620734a905e09c5b67ba64a05aa174a8b6c1894;hb=1f1479ff8ce3a268acb7b70a32bb789d859a915b;hp=0000000000000000000000000000000000000000;hpb=34ec819462d5f81ceeb723e47467bf50a8454f34;p=sim%2Fo1-interface.git diff --git a/ntsimulator/yang/x-ran/ietf-crypto-types.yang b/ntsimulator/yang/x-ran/ietf-crypto-types.yang new file mode 100644 index 0000000..c620734 --- /dev/null +++ b/ntsimulator/yang/x-ran/ietf-crypto-types.yang @@ -0,0 +1,2173 @@ +module ietf-crypto-types { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-crypto-types"; + prefix ct; + + import ietf-yang-types { + prefix yang; + reference + "RFC 6991: Common YANG Data Types"; + } + + import ietf-netconf-acm { + prefix nacm; + reference + "RFC 8341: Network Configuration Access Control Model"; + } + + organization + "IETF NETCONF (Network Configuration) Working Group"; + contact + "WG Web: + WG List: + Author: Kent Watsen + Author: Wang Haiguang "; + + description + "This module defines common YANG types for cryptographic + applications. + + Copyright (c) 2019 IETF Trust and the persons identified + as authors of the code. All rights reserved. + + Redistribution and use in source and binary forms, with + or without modification, is permitted pursuant to, and + subject to the license terms contained in, the Simplified + BSD License set forth in Section 4.c of the IETF Trust's + Legal Provisions Relating to IETF Documents + (https://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC XXXX + (https://www.rfc-editor.org/info/rfcXXXX); see the RFC + itself for full legal notices.; + + The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', + 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', + 'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this document + are to be interpreted as described in BCP 14 (RFC 2119) + (RFC 8174) when, and only when, they appear in all + capitals, as shown here."; + + revision 2019-10-18 { + description + "Initial version"; + reference + "RFC XXXX: Common YANG Data Types for Cryptography"; + } + + /**************************************/ + /* Identities for Hash Algorithms */ + /**************************************/ + + typedef hash-algorithm-t { + type union { + type uint16; + type enumeration { + enum NONE { + value 0; + description + "Hash algorithm is NULL."; + } + enum sha1 { + value 1; + status obsolete; + description + "The SHA1 algorithm."; + reference + "RFC 3174: US Secure Hash Algorithms 1 (SHA1)."; + } + enum sha-224 { + value 2; + description + "The SHA-224 algorithm."; + reference + "RFC 6234: US Secure Hash Algorithms."; + } + enum sha-256 { + value 3; + description + "The SHA-256 algorithm."; + reference + "RFC 6234: US Secure Hash Algorithms."; + } + enum sha-384 { + value 4; + description + "The SHA-384 algorithm."; + reference + "RFC 6234: US Secure Hash Algorithms."; + } + enum sha-512 { + value 5; + description + "The SHA-512 algorithm."; + reference + "RFC 6234: US Secure Hash Algorithms."; + } + enum shake-128 { + value 6; + description + "The SHA3 algorithm with 128-bits output."; + reference + "National Institute of Standards and Technology, + SHA-3 Standard: Permutation-Based Hash and + Extendable-Output Functions, FIPS PUB 202, DOI + 10.6028/NIST.FIPS.202, August 2015."; + } + enum shake-224 { + value 7; + description + "The SHA3 algorithm with 224-bits output."; + reference + "National Institute of Standards and Technology, + SHA-3 Standard: Permutation-Based Hash and + Extendable-Output Functions, FIPS PUB 202, DOI + 10.6028/NIST.FIPS.202, August 2015."; + } + enum shake-256 { + value 8; + description + "The SHA3 algorithm with 256-bits output."; + reference + "National Institute of Standards and Technology, + SHA-3 Standard: Permutation-Based Hash and + Extendable-Output Functions, FIPS PUB 202, DOI + 10.6028/NIST.FIPS.202, August 2015."; + } + enum shake-384 { + value 9; + description + "The SHA3 algorithm with 384-bits output."; + reference + "National Institute of Standards and Technology, + SHA-3 Standard: Permutation-Based Hash and + Extendable-Output Functions, FIPS PUB 202, DOI + 10.6028/NIST.FIPS.202, August 2015."; + } + enum shake-512 { + value 10; + description + "The SHA3 algorithm with 384-bits output."; + reference + "National Institute of Standards and Technology, + SHA-3 Standard: Permutation-Based Hash and + Extendable-Output Functions, FIPS PUB 202, DOI + 10.6028/NIST.FIPS.202, August 2015."; + } + } + } + default "0"; + description + "The uint16 filed shall be set by individual protocol families + according to the hash algorithm value assigned by IANA. The + setting is optional and by default is 0. The enumeration + filed is set to the selected hash algorithm."; + } + + /***********************************************/ + /* Identities for Asymmetric Key Algorithms */ + /***********************************************/ + + typedef asymmetric-key-algorithm-t { + type union { + type uint16; + type enumeration { + enum NONE { + value 0; + description + "Asymetric key algorithm is NULL."; + } + enum rsa1024 { + value 1; + description + "The RSA algorithm using a 1024-bit key."; + reference + "RFC 8017: PKCS #1: RSA Cryptography + Specifications Version 2.2."; + } + enum rsa2048 { + value 2; + description + "The RSA algorithm using a 2048-bit key."; + reference + "RFC 8017: + PKCS #1: RSA Cryptography Specifications Version 2.2."; + } + enum rsa3072 { + value 3; + description + "The RSA algorithm using a 3072-bit key."; + reference + "RFC 8017: + PKCS #1: RSA Cryptography Specifications Version 2.2."; + } + enum rsa4096 { + value 4; + description + "The RSA algorithm using a 4096-bit key."; + reference + "RFC 8017: + PKCS #1: RSA Cryptography Specifications Version 2.2."; + } + enum rsa7680 { + value 5; + description + "The RSA algorithm using a 7680-bit key."; + reference + "RFC 8017: + PKCS #1: RSA Cryptography Specifications Version 2.2."; + } + enum rsa15360 { + value 6; + description + "The RSA algorithm using a 15360-bit key."; + reference + "RFC 8017: + PKCS #1: RSA Cryptography Specifications Version 2.2."; + } + enum secp192r1 { + value 7; + description + "The asymmetric algorithm using a NIST P192 Curve."; + reference + "RFC 6090: + Fundamental Elliptic Curve Cryptography Algorithms. + RFC 5480: + Elliptic Curve Cryptography Subject Public Key + Information."; + } + enum secp224r1 { + value 8; + description + "The asymmetric algorithm using a NIST P224 Curve."; + reference + "RFC 6090: + Fundamental Elliptic Curve Cryptography Algorithms. + RFC 5480: + Elliptic Curve Cryptography Subject Public Key + Information."; + } + enum secp256r1 { + value 9; + description + "The asymmetric algorithm using a NIST P256 Curve."; + reference + "RFC 6090: + Fundamental Elliptic Curve Cryptography Algorithms. + RFC 5480: + Elliptic Curve Cryptography Subject Public Key + Information."; + } + enum secp384r1 { + value 10; + description + "The asymmetric algorithm using a NIST P384 Curve."; + reference + "RFC 6090: + Fundamental Elliptic Curve Cryptography Algorithms. + RFC 5480: + Elliptic Curve Cryptography Subject Public Key + Information."; + } + enum secp521r1 { + value 11; + description + "The asymmetric algorithm using a NIST P521 Curve."; + reference + "RFC 6090: + Fundamental Elliptic Curve Cryptography Algorithms. + RFC 5480: + Elliptic Curve Cryptography Subject Public Key + Information."; + } + enum x25519 { + value 12; + description + "The asymmetric algorithm using a x.25519 Curve."; + reference + "RFC 7748: + Elliptic Curves for Security."; + } + enum x448 { + value 13; + description + "The asymmetric algorithm using a x.448 Curve."; + reference + "RFC 7748: + Elliptic Curves for Security."; + } + } + } + default "0"; + description + "The uint16 filed shall be set by individual protocol + families according to the asymmetric key algorithm value + assigned by IANA. The setting is optional and by default + is 0. The enumeration filed is set to the selected + asymmetric key algorithm."; + } + + /*************************************/ + /* Identities for MAC Algorithms */ + /*************************************/ + + typedef mac-algorithm-t { + type union { + type uint16; + type enumeration { + enum NONE { + value 0; + description + "mac algorithm is NULL."; + } + enum hmac-sha1 { + value 1; + description + "Generating MAC using SHA1 hash function"; + reference + "RFC 3174: US Secure Hash Algorithm 1 (SHA1)"; + } + enum hmac-sha1-96 { + value 2; + description + "Generating MAC using SHA1 hash function"; + reference + "RFC 2404: The Use of HMAC-SHA-1-96 within ESP and AH"; + } + enum hmac-sha2-224 { + value 3; + description + "Generating MAC using SHA2 hash function"; + reference + "RFC 6234: US Secure Hash Algorithms + (SHA and SHA-based HMAC and HKDF)"; + } + enum hmac-sha2-256 { + value 4; + description + "Generating MAC using SHA2 hash function"; + reference + "RFC 6234: US Secure Hash Algorithms + (SHA and SHA-based HMAC and HKDF)"; + } + enum hmac-sha2-256-128 { + value 5; + description + "Generating a 256 bits MAC using SHA2 hash function and + truncate it to 128 bits"; + reference + "RFC 4868: Using HMAC-SHA-256, HMAC-SHA-384, + and HMAC-SHA-512 with IPsec"; + } + enum hmac-sha2-384 { + value 6; + description + "Generating a 384 bits MAC using SHA2 hash function"; + reference + "RFC 6234: US Secure Hash Algorithms + (SHA and SHA-based HMAC and HKDF)"; + } + enum hmac-sha2-384-192 { + value 7; + description + "Generating a 384 bits MAC using SHA2 hash function and + truncate it to 192 bits"; + reference + "RFC 4868: Using HMAC-SHA-256, HMAC-SHA-384, + and HMAC-SHA-512 with IPsec"; + } + enum hmac-sha2-512 { + value 8; + description + "Generating a 512 bits MAC using SHA2 hash function"; + reference + "RFC 6234: US Secure Hash Algorithms + (SHA and SHA-based HMAC and HKDF)"; + } + enum hmac-sha2-512-256 { + value 9; + description + "Generating a 512 bits MAC using SHA2 hash function and + truncate it to 256 bits"; + reference + "RFC 4868: Using HMAC-SHA-256, HMAC-SHA-384, + and HMAC-SHA-512 with IPsec"; + } + enum aes-128-gmac { + value 10; + description + "Generating 128-bit MAC using the Advanced Encryption + Standard (AES) Galois Message Authentication Code + (GMAC) as a mechanism to provide data origin + authentication."; + reference + "RFC 4543: + The Use of Galois Message Authentication Code (GMAC) + in IPsec ESP and AH"; + } + enum aes-192-gmac { + value 11; + description + "Generating 192-bit MAC using the Advanced Encryption + Standard (AES) Galois Message Authentication Code + (GMAC) as a mechanism to provide data origin + authentication."; + reference + "RFC 4543: + The Use of Galois Message Authentication Code (GMAC) + in IPsec ESP and AH"; + } + enum aes-256-gmac { + value 12; + description + "Generating 256-bit MAC using the Advanced Encryption + Standard (AES) Galois Message Authentication Code + (GMAC) as a mechanism to provide data origin + authentication."; + reference + "RFC 4543: + The Use of Galois Message Authentication Code (GMAC) + in IPsec ESP and AH"; + } + enum aes-cmac-96 { + value 13; + description + "Generating 96-bit MAC using Advanced Encryption + Standard (AES) Cipher-based Message Authentication + Code (CMAC)"; + reference + "RFC 4494: + The AES-CMAC Algorithm and its Use with IPsec"; + } + enum aes-cmac-128 { + value 14; + description + "Generating 128-bit MAC using Advanced Encryption + Standard (AES) Cipher-based Message Authentication + Code (CMAC)"; + reference + "RFC 4494: + The AES-CMAC Algorithm and its Use with IPsec"; + } + enum sha1-des3-kd { + value 15; + description + "Generating MAC using triple DES encryption function"; + reference + "RFC 3961: + Encryption and Checksum Specifications for Kerberos + 5"; + } + } + } + default "0"; + description + "The uint16 filed shall be set by individual protocol + families according to the mac algorithm value assigned by + IANA. The setting is optional and by default is 0. The + enumeration filed is set to the selected mac algorithm."; + } + + /********************************************/ + /* Identities for Encryption Algorithms */ + /********************************************/ + + typedef encryption-algorithm-t { + type union { + type uint16; + type enumeration { + enum NONE { + value 0; + description + "Encryption algorithm is NULL."; + } + enum aes-128-cbc { + value 1; + description + "Encrypt message with AES algorithm in CBC mode with + a key length of 128 bits."; + reference + "RFC 3565: Use of the Advanced Encryption Standard (AES) + Encryption Algorithm in Cryptographic Message Syntax + (CMS)"; + } + enum aes-192-cbc { + value 2; + description + "Encrypt message with AES algorithm in CBC mode with + a key length of 192 bits"; + reference + "RFC 3565: Use of the Advanced Encryption Standard (AES) + Encryption Algorithm in Cryptographic Message Syntax + (CMS)"; + } + enum aes-256-cbc { + value 3; + description + "Encrypt message with AES algorithm in CBC mode with + a key length of 256 bits"; + reference + "RFC 3565: Use of the Advanced Encryption Standard (AES) + Encryption Algorithm in Cryptographic Message Syntax + (CMS)"; + } + enum aes-128-ctr { + value 4; + description + "Encrypt message with AES algorithm in CTR mode with + a key length of 128 bits"; + reference + "RFC 3686: + Using Advanced Encryption Standard (AES) Counter + Mode with IPsec Encapsulating Security Payload + (ESP)"; + } + enum aes-192-ctr { + value 5; + description + "Encrypt message with AES algorithm in CTR mode with + a key length of 192 bits"; + reference + "RFC 3686: + Using Advanced Encryption Standard (AES) Counter + Mode with IPsec Encapsulating Security Payload + (ESP)"; + } + enum aes-256-ctr { + value 6; + description + "Encrypt message with AES algorithm in CTR mode with + a key length of 256 bits"; + reference + "RFC 3686: + Using Advanced Encryption Standard (AES) Counter + Mode with IPsec Encapsulating Security Payload + (ESP)"; + } + enum des3-cbc-sha1-kd { + value 7; + description + "Encrypt message with 3DES algorithm in CBC mode + with sha1 function for key derivation"; + reference + "RFC 3961: + Encryption and Checksum Specifications for + Kerberos 5"; + } + enum rc4-hmac { + value 8; + description + "Encrypt message with rc4 algorithm"; + reference + "RFC 4757: + The RC4-HMAC Kerberos Encryption Types Used by + Microsoft Windows"; + } + enum rc4-hmac-exp { + value 9; + description + "Encrypt message with rc4 algorithm that is exportable"; + reference + "RFC 4757: + The RC4-HMAC Kerberos Encryption Types Used by + Microsoft Windows"; + } + } + } + default "0"; + description + "The uint16 filed shall be set by individual protocol + families according to the encryption algorithm value + assigned by IANA. The setting is optional and by default + is 0. The enumeration filed is set to the selected + encryption algorithm."; + } + + /****************************************************/ + /* Identities for Encryption and MAC Algorithms */ + /****************************************************/ + + typedef encryption-and-mac-algorithm-t { + type union { + type uint16; + type enumeration { + enum NONE { + value 0; + description + "Encryption and MAC algorithm is NULL."; + reference + "None"; + } + enum aes-128-ccm { + value 1; + description + "Encrypt message with AES algorithm in CCM + mode with a key length of 128 bits; it can + also be used for generating MAC"; + reference + "RFC 4309: Using Advanced Encryption Standard + (AES) CCM Mode with IPsec Encapsulating Security + Payload (ESP)"; + } + enum aes-192-ccm { + value 2; + description + "Encrypt message with AES algorithm in CCM + mode with a key length of 192 bits; it can + also be used for generating MAC"; + reference + "RFC 4309: Using Advanced Encryption Standard + (AES) CCM Mode with IPsec Encapsulating Security + Payload (ESP)"; + } + enum aes-256-ccm { + value 3; + description + "Encrypt message with AES algorithm in CCM + mode with a key length of 256 bits; it can + also be used for generating MAC"; + reference + "RFC 4309: Using Advanced Encryption Standard + (AES) CCM Mode with IPsec Encapsulating Security + Payload (ESP)"; + } + enum aes-128-gcm { + value 4; + description + "Encrypt message with AES algorithm in GCM + mode with a key length of 128 bits; it can + also be used for generating MAC"; + reference + "RFC 4106: The Use of Galois/Counter Mode (GCM) + in IPsec Encapsulating Security Payload (ESP)"; + } + enum aes-192-gcm { + value 5; + description + "Encrypt message with AES algorithm in GCM + mode with a key length of 192 bits; it can + also be used for generating MAC"; + reference + "RFC 4106: The Use of Galois/Counter Mode (GCM) + in IPsec Encapsulating Security Payload (ESP)"; + } + enum aes-256-gcm { + value 6; + description + "Encrypt message with AES algorithm in GCM + mode with a key length of 256 bits; it can + also be used for generating MAC"; + reference + "RFC 4106: The Use of Galois/Counter Mode (GCM) + in IPsec Encapsulating Security Payload (ESP)"; + } + enum chacha20-poly1305 { + value 7; + description + "Encrypt message with chacha20 algorithm and generate + MAC with POLY1305; it can also be used for generating + MAC"; + reference + "RFC 8439: ChaCha20 and Poly1305 for IETF Protocols"; + } + } + } + default "0"; + description + "The uint16 filed shall be set by individual protocol + families according to the encryption and mac algorithm value + assigned by IANA. The setting is optional and by default is + 0. The enumeration filed is set to the selected encryption + and mac algorithm."; + } + + /******************************************/ + /* Identities for signature algorithm */ + /******************************************/ + + typedef signature-algorithm-t { + type union { + type uint16; + type enumeration { + enum NONE { + value 0; + description + "Signature algorithm is NULL"; + } + enum dsa-sha1 { + value 1; + description + "The signature algorithm using DSA algorithm with SHA1 + hash algorithm"; + reference + "RFC 4253: + The Secure Shell (SSH) Transport Layer Protocol"; + } + enum rsassa-pkcs1-sha1 { + value 2; + description + "The signature algorithm using RSASSA-PKCS1-v1_5 with + the SHA1 hash algorithm."; + reference + "RFC 4253: + The Secure Shell (SSH) Transport Layer Protocol"; + } + enum rsassa-pkcs1-sha256 { + value 3; + description + "The signature algorithm using RSASSA-PKCS1-v1_5 with + the SHA256 hash algorithm."; + reference + "RFC 8332: + Use of RSA Keys with SHA-256 and SHA-512 in the + Secure Shell (SSH) Protocol + RFC 8446: + The Transport Layer Security (TLS) Protocol + Version 1.3"; + } + enum rsassa-pkcs1-sha384 { + value 4; + description + "The signature algorithm using RSASSA-PKCS1-v1_5 with + the SHA384 hash algorithm."; + reference + "RFC 8446: + The Transport Layer Security (TLS) Protocol + Version 1.3"; + } + enum rsassa-pkcs1-sha512 { + value 5; + description + "The signature algorithm using RSASSA-PKCS1-v1_5 with + the SHA512 hash algorithm."; + reference + "RFC 8332: + Use of RSA Keys with SHA-256 and SHA-512 in the + Secure Shell (SSH) Protocol + RFC 8446: + The Transport Layer Security (TLS) Protocol + Version 1.3"; + } + enum rsassa-pss-rsae-sha256 { + value 6; + description + "The signature algorithm using RSASSA-PSS with mask + generation function 1 and SHA256 hash algorithm. If + the public key is carried in an X.509 certificate, + it MUST use the rsaEncryption OID"; + reference + "RFC 8446: + The Transport Layer Security (TLS) Protocol + Version 1.3"; + } + enum rsassa-pss-rsae-sha384 { + value 7; + description + "The signature algorithm using RSASSA-PSS with mask + generation function 1 and SHA384 hash algorithm. If + the public key is carried in an X.509 certificate, + it MUST use the rsaEncryption OID"; + reference + "RFC 8446: + The Transport Layer Security (TLS) Protocol + Version 1.3"; + } + enum rsassa-pss-rsae-sha512 { + value 8; + description + "The signature algorithm using RSASSA-PSS with mask + generation function 1 and SHA512 hash algorithm. If + the public key is carried in an X.509 certificate, + it MUST use the rsaEncryption OID"; + reference + "RFC 8446: + The Transport Layer Security (TLS) Protocol + Version 1.3"; + } + enum rsassa-pss-pss-sha256 { + value 9; + description + "The signature algorithm using RSASSA-PSS with mask + generation function 1 and SHA256 hash algorithm. If + the public key is carried in an X.509 certificate, + it MUST use the rsaEncryption OID"; + reference + "RFC 8446: + The Transport Layer Security (TLS) Protocol + Version 1.3"; + } + enum rsassa-pss-pss-sha384 { + value 10; + description + "The signature algorithm using RSASSA-PSS with mask + generation function 1 and SHA384 hash algorithm. If + the public key is carried in an X.509 certificate, + it MUST use the rsaEncryption OID"; + reference + "RFC 8446: + The Transport Layer Security (TLS) Protocol + Version 1.3"; + } + enum rsassa-pss-pss-sha512 { + value 11; + description + "The signature algorithm using RSASSA-PSS with mask + generation function 1 and SHA512 hash algorithm. If + the public key is carried in an X.509 certificate, + it MUST use the rsaEncryption OID"; + reference + "RFC 8446: + The Transport Layer Security (TLS) Protocol + Version 1.3"; + } + enum ecdsa-secp256r1-sha256 { + value 12; + description + "The signature algorithm using ECDSA with curve name + secp256r1 and SHA256 hash algorithm."; + reference + "RFC 5656: + Elliptic Curve Algorithm Integration in the Secure + Shell Transport Layer + RFC 8446: + The Transport Layer Security (TLS) Protocol + Version 1.3"; + } + enum ecdsa-secp384r1-sha384 { + value 13; + description + "The signature algorithm using ECDSA with curve name + secp384r1 and SHA384 hash algorithm."; + reference + "RFC 5656: + Elliptic Curve Algorithm Integration in the Secure + Shell Transport Layer + RFC 8446: + The Transport Layer Security (TLS) Protocol + Version 1.3"; + } + enum ecdsa-secp521r1-sha512 { + value 14; + description + "The signature algorithm using ECDSA with curve name + secp521r1 and SHA512 hash algorithm."; + reference + "RFC 5656: + Elliptic Curve Algorithm Integration in the Secure + Shell Transport Layer + RFC 8446: + The Transport Layer Security (TLS) Protocol + Version 1.3"; + } + enum ed25519 { + value 15; + description + "The signature algorithm using EdDSA with curve x25519"; + reference + "RFC 8032: + Edwards-Curve Digital Signature Algorithm (EdDSA)"; + } + enum ed25519-cts { + value 16; + description + "The signature algorithm using EdDSA with curve x25519 + with phflag = 0"; + reference + "RFC 8032: + Edwards-Curve Digital Signature Algorithm (EdDSA)"; + } + enum ed25519-ph { + value 17; + description + "The signature algorithm using EdDSA with curve x25519 + with phflag = 1"; + reference + "RFC 8032: + Edwards-Curve Digital Signature Algorithm (EdDSA)"; + } + enum ed25519-sha512 { + value 18; + description + "The signature algorithm using EdDSA with curve x25519 + and SHA-512 function"; + reference + "RFC 8419: + Use of Edwards-Curve Digital Signature Algorithm + (EdDSA) Signatures in the Cryptographic Message + Syntax (CMS)"; + } + enum ed448 { + value 19; + description + "The signature algorithm using EdDSA with curve x448"; + reference + "RFC 8032: + Edwards-Curve Digital Signature Algorithm (EdDSA)"; + } + enum ed448-ph { + value 20; + description + "The signature algorithm using EdDSA with curve x448 + and with PH being SHAKE256(x, 64) and phflag being 1"; + reference + "RFC 8032: + Edwards-Curve Digital Signature Algorithm (EdDSA)"; + } + enum ed448-shake256 { + value 21; + description + "The signature algorithm using EdDSA with curve x448 + and SHAKE-256 function"; + reference + "RFC 8419: + Use of Edwards-Curve Digital Signature Algorithm + (EdDSA) Signatures in the Cryptographic Message + Syntax (CMS)"; + } + enum ed448-shake256-len { + value 22; + description + "The signature algorithm using EdDSA with curve x448 + and SHAKE-256 function and a customized hash output"; + reference + "RFC 8419: + Use of Edwards-Curve Digital Signature Algorithm + (EdDSA) Signatures in the Cryptographic Message + Syntax (CMS)"; + } + enum rsa-sha2-256 { + value 23; + description + "The signature algorithm using RSA with SHA2 function + for SSH protocol"; + reference + "RFC 8332: + Use of RSA Keys with SHA-256 and SHA-512 + in the Secure Shell (SSH) Protocol"; + } + enum rsa-sha2-512 { + value 24; + description + "The signature algorithm using RSA with SHA2 function + for SSH protocol"; + reference + "RFC 8332: + Use of RSA Keys with SHA-256 and SHA-512 + in the Secure Shell (SSH) Protocol"; + } + enum eccsi { + value 25; + description + "The signature algorithm using ECCSI signature as + defined in RFC 6507."; + reference + "RFC 6507: + Elliptic Curve-Based Certificateless Signatures + for Identity-based Encryption (ECCSI)"; + } + } + } + default "0"; + description + "The uint16 filed shall be set by individual protocol + families according to the signature algorithm value + assigned by IANA. The setting is optional and by default + is 0. The enumeration filed is set to the selected + signature algorithm."; + } + + /**********************************************/ + /* Identities for key exchange algorithms */ + /**********************************************/ + + typedef key-exchange-algorithm-t { + type union { + type uint16; + type enumeration { + enum NONE { + value 0; + description + "Key exchange algorithm is NULL."; + } + enum psk-only { + value 1; + description + "Using Pre-shared key for authentication and key + exchange"; + reference + "RFC 4279: + Pre-Shared Key cipher suites for Transport Layer + Security (TLS)"; + } + enum dhe-ffdhe2048 { + value 2; + description + "Ephemeral Diffie Hellman key exchange with 2048 bit + finite field"; + reference + "RFC 7919: + Negotiated Finite Field Diffie-Hellman Ephemeral + Parameters for Transport Layer Security (TLS)"; + } + enum dhe-ffdhe3072 { + value 3; + description + "Ephemeral Diffie Hellman key exchange with 3072 bit + finite field"; + reference + "RFC 7919: + Negotiated Finite Field Diffie-Hellman Ephemeral + Parameters for Transport Layer Security (TLS)"; + } + enum dhe-ffdhe4096 { + value 4; + description + "Ephemeral Diffie Hellman key exchange with 4096 bit + finite field"; + reference + "RFC 7919: + Negotiated Finite Field Diffie-Hellman Ephemeral + Parameters for Transport Layer Security (TLS)"; + } + enum dhe-ffdhe6144 { + value 5; + description + "Ephemeral Diffie Hellman key exchange with 6144 bit + finite field"; + reference + "RFC 7919: + Negotiated Finite Field Diffie-Hellman Ephemeral + Parameters for Transport Layer Security (TLS)"; + } + enum dhe-ffdhe8192 { + value 6; + description + "Ephemeral Diffie Hellman key exchange with 8192 bit + finite field"; + reference + "RFC 7919: + Negotiated Finite Field Diffie-Hellman Ephemeral + Parameters for Transport Layer Security (TLS)"; + } + enum psk-dhe-ffdhe2048 { + value 7; + description + "Key exchange using pre-shared key with Diffie-Hellman + key generation mechanism, where the DH group is + FFDHE2048"; + reference + "RFC 8446: + The Transport Layer Security (TLS) Protocol + Version 1.3"; + } + enum psk-dhe-ffdhe3072 { + value 8; + description + "Key exchange using pre-shared key with Diffie-Hellman + key generation mechanism, where the DH group is + FFDHE3072"; + reference + "RFC 8446: + The Transport Layer Security (TLS) Protocol + Version 1.3"; + } + enum psk-dhe-ffdhe4096 { + value 9; + description + "Key exchange using pre-shared key with Diffie-Hellman + key generation mechanism, where the DH group is + FFDHE4096"; + reference + "RFC 8446: + The Transport Layer Security (TLS) Protocol + Version 1.3"; + } + enum psk-dhe-ffdhe6144 { + value 10; + description + "Key exchange using pre-shared key with Diffie-Hellman + key generation mechanism, where the DH group is + FFDHE6144"; + reference + "RFC 8446: + The Transport Layer Security (TLS) Protocol + Version 1.3"; + } + enum psk-dhe-ffdhe8192 { + value 11; + description + "Key exchange using pre-shared key with Diffie-Hellman + key generation mechanism, where the DH group is + FFDHE8192"; + reference + "RFC 8446: + The Transport Layer Security (TLS) Protocol + Version 1.3"; + } + enum ecdhe-secp256r1 { + value 12; + description + "Ephemeral Diffie Hellman key exchange with elliptic + group over curve secp256r1"; + reference + "RFC 8422: + Elliptic Curve Cryptography (ECC) Cipher Suites + for Transport Layer Security (TLS) Versions 1.2 + and Earlier"; + } + enum ecdhe-secp384r1 { + value 13; + description + "Ephemeral Diffie Hellman key exchange with elliptic + group over curve secp384r1"; + reference + "RFC 8422: + Elliptic Curve Cryptography (ECC) Cipher Suites + for Transport Layer Security (TLS) Versions 1.2 + and Earlier"; + } + enum ecdhe-secp521r1 { + value 14; + description + "Ephemeral Diffie Hellman key exchange with elliptic + group over curve secp521r1"; + reference + "RFC 8422: + Elliptic Curve Cryptography (ECC) Cipher Suites + for Transport Layer Security (TLS) Versions 1.2 + and Earlier"; + } + enum ecdhe-x25519 { + value 15; + description + "Ephemeral Diffie Hellman key exchange with elliptic + group over curve x25519"; + reference + "RFC 8422: + Elliptic Curve Cryptography (ECC) Cipher Suites + for Transport Layer Security (TLS) Versions 1.2 + and Earlier"; + } + enum ecdhe-x448 { + value 16; + description + "Ephemeral Diffie Hellman key exchange with elliptic + group over curve x448"; + reference + "RFC 8422: + Elliptic Curve Cryptography (ECC) Cipher Suites + for Transport Layer Security (TLS) Versions 1.2 + and Earlier"; + } + enum psk-ecdhe-secp256r1 { + value 17; + description + "Key exchange using pre-shared key with elliptic + group-based Ephemeral Diffie Hellman key exchange + over curve secp256r1"; + reference + "RFC 8446: + The Transport Layer Security (TLS) Protocol + Version 1.3"; + } + enum psk-ecdhe-secp384r1 { + value 18; + description + "Key exchange using pre-shared key with elliptic + group-based Ephemeral Diffie Hellman key exchange + over curve secp384r1"; + reference + "RFC 8446: + The Transport Layer Security (TLS) Protocol + Version 1.3"; + } + enum psk-ecdhe-secp521r1 { + value 19; + description + "Key exchange using pre-shared key with elliptic + group-based Ephemeral Diffie Hellman key exchange + over curve secp521r1"; + reference + "RFC 8446: + The Transport Layer Security (TLS) Protocol + Version 1.3"; + } + enum psk-ecdhe-x25519 { + value 20; + description + "Key exchange using pre-shared key with elliptic + group-based Ephemeral Diffie Hellman key exchange + over curve x25519"; + reference + "RFC 8446: + The Transport Layer Security (TLS) Protocol + Version 1.3"; + } + enum psk-ecdhe-x448 { + value 21; + description + "Key exchange using pre-shared key with elliptic + group-based Ephemeral Diffie Hellman key exchange + over curve x448"; + reference + "RFC 8446: + The Transport Layer Security (TLS) Protocol + Version 1.3"; + } + enum diffie-hellman-group14-sha1 { + value 22; + description + "Using DH group14 and SHA1 for key exchange"; + reference + "RFC 4253: + The Secure Shell (SSH) Transport Layer Protocol"; + } + enum diffie-hellman-group14-sha256 { + value 23; + description + "Using DH group14 and SHA-256 for key exchange"; + reference + "RFC 8268: + More Modular Exponentiation (MODP) Diffie-Hellman (DH) + Key Exchange (KEX) Groups for Secure Shell (SSH)"; + } + enum diffie-hellman-group15-sha512 { + value 24; + description + "Using DH group15 and SHA-512 for key exchange"; + reference + "RFC 8268: + More Modular Exponentiation (MODP) Diffie-Hellman (DH) + Key Exchange (KEX) Groups for Secure Shell (SSH)"; + } + enum diffie-hellman-group16-sha512 { + value 25; + description + "Using DH group16 and SHA-512 for key exchange"; + reference + "RFC 8268: + More Modular Exponentiation (MODP) Diffie-Hellman (DH) + Key Exchange (KEX) Groups for Secure Shell (SSH)"; + } + enum diffie-hellman-group17-sha512 { + value 26; + description + "Using DH group17 and SHA-512 for key exchange"; + reference + "RFC 8268: + More Modular Exponentiation (MODP) Diffie-Hellman (DH) + Key Exchange (KEX) Groups for Secure Shell (SSH)"; + } + enum diffie-hellman-group18-sha512 { + value 27; + description + "Using DH group18 and SHA-512 for key exchange"; + reference + "RFC 8268: + More Modular Exponentiation (MODP) Diffie-Hellman (DH) + Key Exchange (KEX) Groups for Secure Shell (SSH)"; + } + enum ecdh-sha2-secp256r1 { + value 28; + description + "Elliptic curve-based Diffie Hellman key exchange over + curve ecp256r1 and using SHA2 for MAC generation"; + reference + "RFC 6239: + Suite B Cryptographic Suites for Secure Shell (SSH)"; + } + enum ecdh-sha2-secp384r1 { + value 29; + description + "Elliptic curve-based Diffie Hellman key exchange over + curve ecp384r1 and using SHA2 for MAC generation"; + reference + "RFC 6239: + Suite B Cryptographic Suites for Secure Shell (SSH)"; + } + enum ecdh-x25519-x9.63-sha256 { + value 30; + description + "Elliptic curve-based Diffie Hellman key exchange over + curve x.25519 and using ANSI x9.63 with SHA256 as KDF"; + reference + "RFC 8418: + Use of the Elliptic Curve Diffie-Hellman Key Agreement + Algorithm with X25519 and X448 in the Cryptographic + Message Syntax (CMS)"; + } + enum ecdh-x25519-x9.63-sha384 { + value 31; + description + "Elliptic curve-based Diffie Hellman key exchange over + curve x.25519 and using ANSI x9.63 with SHA384 as KDF"; + reference + "RFC 8418: + Use of the Elliptic Curve Diffie-Hellman Key Agreement + Algorithm with X25519 and X448 in the Cryptographic + Message Syntax (CMS)"; + } + enum ecdh-x25519-x9.63-sha512 { + value 32; + description + "Elliptic curve-based Diffie Hellman key exchange over + curve x.25519 and using ANSI x9.63 with SHA512 as KDF"; + reference + "RFC 8418: + Use of the Elliptic Curve Diffie-Hellman Key Agreement + Algorithm with X25519 and X448 in the Cryptographic + Message Syntax (CMS)"; + } + enum ecdh-x25519-hkdf-sha256 { + value 33; + description + "Elliptic curve-based Diffie Hellman key exchange over + curve x.25519 and using HKDF with SHA256 as KDF"; + reference + "RFC 8418: + Use of the Elliptic Curve Diffie-Hellman Key Agreement + Algorithm with X25519 and X448 in the Cryptographic + Message Syntax (CMS)"; + } + enum ecdh-x25519-hkdf-sha384 { + value 34; + description + "Elliptic curve-based Diffie Hellman key exchange over + curve x.25519 and using HKDF with SHA384 as KDF"; + reference + "RFC 8418: + Use of the Elliptic Curve Diffie-Hellman Key Agreement + Algorithm with X25519 and X448 in the Cryptographic + Message Syntax (CMS)"; + } + enum ecdh-x25519-hkdf-sha512 { + value 35; + description + "Elliptic curve-based Diffie Hellman key exchange over + curve x.25519 and using HKDF with SHA512 as KDF"; + reference + "RFC 8418: + Use of the Elliptic Curve Diffie-Hellman Key Agreement + Algorithm with X25519 and X448 in the Cryptographic + Message Syntax (CMS)"; + } + enum ecdh-x448-x9.63-sha256 { + value 36; + description + "Elliptic curve-based Diffie Hellman key exchange over + curve x.448 and using ANSI x9.63 with SHA256 as KDF"; + reference + "RFC 8418: + Use of the Elliptic Curve Diffie-Hellman Key Agreement + Algorithm with X25519 and X448 in the Cryptographic + Message Syntax (CMS)"; + } + enum ecdh-x448-x9.63-sha384 { + value 37; + description + "Elliptic curve-based Diffie Hellman key exchange over + curve x.448 and using ANSI x9.63 with SHA384 as KDF"; + reference + "RFC 8418: + Use of the Elliptic Curve Diffie-Hellman Key Agreement + Algorithm with X25519 and X448 in the Cryptographic + Message Syntax (CMS)"; + } + enum ecdh-x448-x9.63-sha512 { + value 38; + description + "Elliptic curve-based Diffie Hellman key exchange over + curve x.448 and using ANSI x9.63 with SHA512 as KDF"; + reference + "RFC 8418: + Use of the Elliptic Curve Diffie-Hellman Key Agreement + Algorithm with X25519 and X448 in the Cryptographic + Message Syntax (CMS)"; + } + enum ecdh-x448-hkdf-sha256 { + value 39; + description + "Elliptic curve-based Diffie Hellman key exchange over + curve x.448 and using HKDF with SHA256 as KDF"; + reference + "RFC 8418: + Use of the Elliptic Curve Diffie-Hellman Key Agreement + Algorithm with X25519 and X448 in the Cryptographic + Message Syntax (CMS)"; + } + enum ecdh-x448-hkdf-sha384 { + value 40; + description + "Elliptic curve-based Diffie Hellman key exchange over + curve x.448 and using HKDF with SHA384 as KDF"; + reference + "RFC 8418: + Use of the Elliptic Curve Diffie-Hellman Key Agreement + Algorithm with X25519 and X448 in the Cryptographic + Message Syntax (CMS)"; + } + enum ecdh-x448-hkdf-sha512 { + value 41; + description + "Elliptic curve-based Diffie Hellman key exchange over + curve x.448 and using HKDF with SHA512 as KDF"; + reference + "RFC 8418: + Use of the Elliptic Curve Diffie-Hellman Key Agreement + Algorithm with X25519 and X448 in the Cryptographic + Message Syntax (CMS)"; + } + + enum rsaes-oaep { + value 42; + description + "RSAES-OAEP combines the RSAEP and RSADP primitives with + the EME-OAEP encoding method"; + reference + "RFC 8017: + PKCS #1: + RSA Cryptography Specifications Version 2.2."; + } + enum rsaes-pkcs1-v1_5 { + value 43; + description + "RSAES-PKCS1-v1_5 combines the RSAEP and RSADP + primitives with the EME-PKCS1-v1_5 encoding method"; + reference + "RFC 8017: + PKCS #1: + RSA Cryptography Specifications Version 2.2."; + } + } + } + default "0"; + description + "The uint16 filed shall be set by individual protocol + families according to the key exchange algorithm value + assigned by IANA. The setting is optional and by default + is 0. The enumeration filed is set to the selected key + exchange algorithm."; + } + + /********************************************/ + /* Identities for Key Format Structures */ + /********************************************/ + + /*** all key format types ****/ + + identity key-format-base { + description "Base key-format identity for all keys."; + } + + identity public-key-format { + base "key-format-base"; + description "Base key-format identity for public keys."; + } + + identity private-key-format { + base "key-format-base"; + description "Base key-format identity for private keys."; + } + + identity symmetric-key-format { + base "key-format-base"; + description "Base key-format identity for symmetric keys."; + } + + /**** for private keys ****/ + + identity rsa-private-key-format { + base "private-key-format"; + description "An RSAPrivateKey (from RFC 3447)."; + } + + identity ec-private-key-format { + base "private-key-format"; + description "An ECPrivateKey (from RFC 5915)"; + } + + identity one-asymmetric-key-format { + base "private-key-format"; + description "A OneAsymmetricKey (from RFC 5958)."; + } + + identity encrypted-private-key-format { + base "private-key-format"; + description + "A CMS EncryptedData structure (RFC 5652) + containing a OneAsymmetricKey (RFC 5958)."; + } + + /**** for public keys ****/ + + identity ssh-public-key-format { + base "public-key-format"; + description + "The public key format described by RFC 4716."; + } + + identity subject-public-key-info-format { + base "public-key-format"; + description + "A SubjectPublicKeyInfo (from RFC 5280)."; + } + + /**** for symmetric keys ****/ + + identity octet-string-key-format { + base "symmetric-key-format"; + description "An OctetString from ASN.1."; + /* + // Knowing that it is an "OctetString" isn't really helpful. + // Knowing the length of the octet string would be helpful, + // as it relates to the algorithm's block size. We may want + // to only (for now) use "one-symmetric-key-format" for + // symmetric keys...were the usability issues Juergen + // mentioned before only apply to asymmetric keys? + */ + } + + identity one-symmetric-key-format { + base "symmetric-key-format"; + description "A OneSymmetricKey (from RFC6031)."; + } + + identity encrypted-symmetric-key-format { + base "symmetric-key-format"; + description + "A CMS EncryptedData structure (RFC 5652) + containing a OneSymmetricKey (RFC 6031)."; + } + + /***************************************************/ + /* Typedefs for ASN.1 structures from RFC 5280 */ + /***************************************************/ + + typedef x509 { + type binary; + description + "A Certificate structure, as specified in RFC 5280, + encoded using ASN.1 distinguished encoding rules (DER), + as specified in ITU-T X.690."; + reference + "RFC 5280: + Internet X.509 Public Key Infrastructure Certificate + and Certificate Revocation List (CRL) Profile + ITU-T X.690: + Information technology - ASN.1 encoding rules: + Specification of Basic Encoding Rules (BER), + Canonical Encoding Rules (CER) and Distinguished + Encoding Rules (DER)."; + } + + typedef crl { + type binary; + description + "A CertificateList structure, as specified in RFC 5280, + encoded using ASN.1 distinguished encoding rules (DER), + as specified in ITU-T X.690."; + reference + "RFC 5280: + Internet X.509 Public Key Infrastructure Certificate + and Certificate Revocation List (CRL) Profile + ITU-T X.690: + Information technology - ASN.1 encoding rules: + Specification of Basic Encoding Rules (BER), + Canonical Encoding Rules (CER) and Distinguished + Encoding Rules (DER)."; + } + + /***********************************************/ + /* Typedefs for ASN.1 structures from 5652 */ + /***********************************************/ + + typedef cms { + type binary; + description + "A ContentInfo structure, as specified in RFC 5652, + encoded using ASN.1 distinguished encoding rules (DER), + as specified in ITU-T X.690."; + reference + "RFC 5652: + Cryptographic Message Syntax (CMS) + ITU-T X.690: + Information technology - ASN.1 encoding rules: + Specification of Basic Encoding Rules (BER), + Canonical Encoding Rules (CER) and Distinguished + Encoding Rules (DER)."; + } + typedef data-content-cms { + type cms; + description + "A CMS structure whose top-most content type MUST be the + data content type, as described by Section 4 in RFC 5652."; + reference + "RFC 5652: Cryptographic Message Syntax (CMS)"; + } + + typedef signed-data-cms { + type cms; + description + "A CMS structure whose top-most content type MUST be the + signed-data content type, as described by Section 5 in + RFC 5652."; + reference + "RFC 5652: Cryptographic Message Syntax (CMS)"; + } + + typedef enveloped-data-cms { + type cms; + description + "A CMS structure whose top-most content type MUST be the + enveloped-data content type, as described by Section 6 + in RFC 5652."; + reference + "RFC 5652: Cryptographic Message Syntax (CMS)"; + } + + typedef digested-data-cms { + type cms; + description + "A CMS structure whose top-most content type MUST be the + digested-data content type, as described by Section 7 + in RFC 5652."; + reference + "RFC 5652: Cryptographic Message Syntax (CMS)"; + } + + typedef encrypted-data-cms { + type cms; + description + "A CMS structure whose top-most content type MUST be the + encrypted-data content type, as described by Section 8 + in RFC 5652."; + reference + "RFC 5652: Cryptographic Message Syntax (CMS)"; + } + typedef authenticated-data-cms { + type cms; + description + "A CMS structure whose top-most content type MUST be the + authenticated-data content type, as described by Section 9 + in RFC 5652."; + reference + "RFC 5652: Cryptographic Message Syntax (CMS)"; + } + + /***************************************************/ + /* Typedefs for structures related to RFC 4253 */ + /***************************************************/ + + typedef ssh-host-key { + type binary; + description + "The binary public key data for this SSH key, as + specified by RFC 4253, Section 6.6, i.e.: + + string certificate or public key format + identifier + byte[n] key/certificate data."; + reference + "RFC 4253: The Secure Shell (SSH) Transport Layer + Protocol"; + } + + /*********************************************************/ + /* Typedefs for ASN.1 structures related to RFC 5280 */ + /*********************************************************/ + + typedef trust-anchor-cert-x509 { + type x509; + description + "A Certificate structure that MUST encode a self-signed + root certificate."; + } + + typedef end-entity-cert-x509 { + type x509; + description + "A Certificate structure that MUST encode a certificate + that is neither self-signed nor having Basic constraint + CA true."; + } + + /*********************************************************/ + /* Typedefs for ASN.1 structures related to RFC 5652 */ + /*********************************************************/ + + typedef trust-anchor-cert-cms { + type signed-data-cms; + description + "A CMS SignedData structure that MUST contain the chain of + X.509 certificates needed to authenticate the certificate + presented by a client or end-entity. + + The CMS MUST contain only a single chain of certificates. + The client or end-entity certificate MUST only authenticate + to last intermediate CA certificate listed in the chain. + + In all cases, the chain MUST include a self-signed root + certificate. In the case where the root certificate is + itself the issuer of the client or end-entity certificate, + only one certificate is present. + + This CMS structure MAY (as applicable where this type is + used) also contain suitably fresh (as defined by local + policy) revocation objects with which the device can + verify the revocation status of the certificates. + + This CMS encodes the degenerate form of the SignedData + structure that is commonly used to disseminate X.509 + certificates and revocation objects (RFC 5280)."; + reference + "RFC 5280: + Internet X.509 Public Key Infrastructure Certificate + and Certificate Revocation List (CRL) Profile."; + } + + typedef end-entity-cert-cms { + type signed-data-cms; + description + "A CMS SignedData structure that MUST contain the end + entity certificate itself, and MAY contain any number + of intermediate certificates leading up to a trust + anchor certificate. The trust anchor certificate + MAY be included as well. + + The CMS MUST contain a single end entity certificate. + The CMS MUST NOT contain any spurious certificates. + + This CMS structure MAY (as applicable where this type is + used) also contain suitably fresh (as defined by local + policy) revocation objects with which the device can + verify the revocation status of the certificates. + + This CMS encodes the degenerate form of the SignedData + structure that is commonly used to disseminate X.509 + certificates and revocation objects (RFC 5280)."; + reference + "RFC 5280: + Internet X.509 Public Key Infrastructure Certificate + and Certificate Revocation List (CRL) Profile."; + } + + typedef ssh-public-key-type { // DELETE? + type binary; + description + "The binary public key data for this SSH key, as + specified by RFC 4253, Section 6.6, i.e.: + + string certificate or public key format + identifier + byte[n] key/certificate data."; + reference + "RFC 4253: The Secure Shell (SSH) Transport + Layer Protocol"; + } + + /**********************************************/ + /* Groupings for keys and/or certificates */ + /**********************************************/ + + grouping symmetric-key-grouping { + description + "A symmetric key and algorithm."; + leaf algorithm { + type encryption-algorithm-t; + mandatory true; + description + "The algorithm to be used when generating the key."; + reference + "RFC CCCC: Common YANG Data Types for Cryptography"; + } + leaf key-format { + nacm:default-deny-write; + when "../key"; + type identityref { + base symmetric-key-format; + } + description "Identifies the symmetric key's format."; + } + choice key-type { + mandatory true; + description + "Choice between key types."; + leaf key { + nacm:default-deny-all; + type binary; + //must "../key-format"; FIXME: remove comment if approach ok + description + "The binary value of the key. The interpretation of + the value is defined by 'key-format'. For example, + FIXME."; + reference + "RFC XXXX: FIXME"; + } + leaf hidden-key { + nacm:default-deny-write; + type empty; + description + "A permanently hidden key. How such keys are created + is outside the scope of this module."; + } + } + } + + grouping public-key-grouping { + description + "A public key and its associated algorithm."; + leaf algorithm { + nacm:default-deny-write; + type asymmetric-key-algorithm-t; + mandatory true; + description + "Identifies the key's algorithm."; + reference + "RFC CCCC: Common YANG Data Types for Cryptography"; + } + leaf public-key-format { + nacm:default-deny-write; + when "../public-key"; + type identityref { + base public-key-format; + } + description "Identifies the key's format."; + } + leaf public-key { + nacm:default-deny-write; + type binary; + //must "../public-key-format"; FIXME: rm comment if approach ok + mandatory true; + description + "The binary value of the public key. The interpretation + of the value is defined by 'public-key-format' field."; + } + } + + grouping asymmetric-key-pair-grouping { + description + "A private key and its associated public key and algorithm."; + uses public-key-grouping; + leaf private-key-format { + nacm:default-deny-write; + when "../private-key"; + type identityref { + base private-key-format; + } + description "Identifies the key's format."; + } + choice private-key-type { + mandatory true; + description + "Choice between key types."; + leaf private-key { + nacm:default-deny-all; + type binary; + //must "../private-key-format"; FIXME: rm comment if ok + description + "The value of the binary key. The key's value is + interpreted by the 'private-key-format' field."; + } + leaf hidden-private-key { + nacm:default-deny-write; + type empty; + description + "A permanently hidden key. How such keys are created + is outside the scope of this module."; + } + } + } + + grouping trust-anchor-cert-grouping { + description + "A trust anchor certificate, and a notification for when + it is about to (or already has) expire."; + leaf cert { + nacm:default-deny-write; + type trust-anchor-cert-cms; + description + "The binary certificate data for this certificate."; + reference + "RFC YYYY: Common YANG Data Types for Cryptography"; + } + notification certificate-expiration { + description + "A notification indicating that the configured certificate + is either about to expire or has already expired. When to + send notifications is an implementation specific decision, + but it is RECOMMENDED that a notification be sent once a + month for 3 months, then once a week for four weeks, and + then once a day thereafter until the issue is resolved."; + leaf expiration-date { + type yang:date-and-time; + mandatory true; + description + "Identifies the expiration date on the certificate."; + } + } + } + + grouping trust-anchor-certs-grouping { + description + "A list of trust anchor certificates, and a notification + for when one is about to (or already has) expire."; + leaf-list cert { + nacm:default-deny-write; + type trust-anchor-cert-cms; + description + "The binary certificate data for this certificate."; + reference + "RFC YYYY: Common YANG Data Types for Cryptography"; + } + notification certificate-expiration { + description + "A notification indicating that the configured certificate + is either about to expire or has already expired. When to + send notifications is an implementation specific decision, + but it is RECOMMENDED that a notification be sent once a + month for 3 months, then once a week for four weeks, and + then once a day thereafter until the issue is resolved."; + leaf expiration-date { + type yang:date-and-time; + mandatory true; + description + "Identifies the expiration date on the certificate."; + } + } + } + + grouping end-entity-cert-grouping { + description + "An end entity certificate, and a notification for when + it is about to (or already has) expire. Implementations + SHOULD assert that, where used, the end entity certificate + contains the expected public key."; + leaf cert { + nacm:default-deny-write; + type end-entity-cert-cms; + description + "The binary certificate data for this certificate."; + reference + "RFC YYYY: Common YANG Data Types for Cryptography"; + } + notification certificate-expiration { + description + "A notification indicating that the configured certificate + is either about to expire or has already expired. When to + send notifications is an implementation specific decision, + but it is RECOMMENDED that a notification be sent once a + month for 3 months, then once a week for four weeks, and + then once a day thereafter until the issue is resolved."; + leaf expiration-date { + type yang:date-and-time; + mandatory true; + description + "Identifies the expiration date on the certificate."; + } + } + } + + grouping end-entity-certs-grouping { + description + "A list of end entity certificates, and a notification for + when one is about to (or already has) expire."; + leaf-list cert { + nacm:default-deny-write; + type end-entity-cert-cms; + description + "The binary certificate data for this certificate."; + reference + "RFC YYYY: Common YANG Data Types for Cryptography"; + } + notification certificate-expiration { + description + "A notification indicating that the configured certificate + is either about to expire or has already expired. When to + send notifications is an implementation specific decision, + but it is RECOMMENDED that a notification be sent once a + month for 3 months, then once a week for four weeks, and + then once a day thereafter until the issue is resolved."; + leaf expiration-date { + type yang:date-and-time; + mandatory true; + description + "Identifies the expiration date on the certificate."; + } + } + } + + grouping asymmetric-key-pair-with-cert-grouping { + description + "A private/public key pair and an associated certificate. + Implementations SHOULD assert that certificates contain + the matching public key."; + uses asymmetric-key-pair-grouping; + uses end-entity-cert-grouping; + action generate-certificate-signing-request { + nacm:default-deny-all; + description + "Generates a certificate signing request structure for + the associated asymmetric key using the passed subject + and attribute values. The specified assertions need + to be appropriate for the certificate's use. For + example, an entity certificate for a TLS server + SHOULD have values that enable clients to satisfy + RFC 6125 processing."; + input { + leaf subject { + type binary; + mandatory true; + description + "The 'subject' field per the CertificationRequestInfo + structure as specified by RFC 2986, Section 4.1 + encoded using the ASN.1 distinguished encoding + rules (DER), as specified in ITU-T X.690."; + reference + "RFC 2986: + PKCS #10: Certification Request Syntax + Specification Version 1.7. + ITU-T X.690: + Information technology - ASN.1 encoding rules: + Specification of Basic Encoding Rules (BER), + Canonical Encoding Rules (CER) and Distinguished + Encoding Rules (DER)."; + } + leaf attributes { + type binary; // FIXME: does this need to be mandatory? + description + "The 'attributes' field from the structure + CertificationRequestInfo as specified by RFC 2986, + Section 4.1 encoded using the ASN.1 distinguished + encoding rules (DER), as specified in ITU-T X.690."; + reference + "RFC 2986: + PKCS #10: Certification Request Syntax + Specification Version 1.7. + ITU-T X.690: + Information technology - ASN.1 encoding rules: + Specification of Basic Encoding Rules (BER), + Canonical Encoding Rules (CER) and Distinguished + Encoding Rules (DER)."; + } + } + output { + leaf certificate-signing-request { + type binary; + mandatory true; + description + "A CertificationRequest structure as specified by + RFC 2986, Section 4.2 encoded using the ASN.1 + distinguished encoding rules (DER), as specified + in ITU-T X.690."; + reference + "RFC 2986: + PKCS #10: Certification Request Syntax + Specification Version 1.7. + ITU-T X.690: + Information technology - ASN.1 encoding rules: + Specification of Basic Encoding Rules (BER), + Canonical Encoding Rules (CER) and Distinguished + Encoding Rules (DER)."; + } + } + } // generate-certificate-signing-request + } // asymmetric-key-pair-with-cert-grouping + + grouping asymmetric-key-pair-with-certs-grouping { + description + "A private/public key pair and associated certificates. + Implementations SHOULD assert that certificates contain + the matching public key."; + uses asymmetric-key-pair-grouping; + container certificates { + nacm:default-deny-write; + description + "Certificates associated with this asymmetric key. + More than one certificate supports, for instance, + a TPM-protected asymmetric key that has both IDevID + and LDevID certificates associated."; + list certificate { + key "name"; + description + "A certificate for this asymmetric key."; + leaf name { + type string; + description + "An arbitrary name for the certificate. If the name + matches the name of a certificate that exists + independently in (i.e., an IDevID), + then the 'cert' node MUST NOT be configured."; + } + uses end-entity-cert-grouping; + } + } // certificates + action generate-certificate-signing-request { + nacm:default-deny-all; + description + "Generates a certificate signing request structure for + the associated asymmetric key using the passed subject + and attribute values. The specified assertions need + to be appropriate for the certificate's use. For + example, an entity certificate for a TLS server + SHOULD have values that enable clients to satisfy + RFC 6125 processing."; + input { + leaf subject { + type binary; + mandatory true; + description + "The 'subject' field per the CertificationRequestInfo + structure as specified by RFC 2986, Section 4.1 + encoded using the ASN.1 distinguished encoding + rules (DER), as specified in ITU-T X.690."; + reference + "RFC 2986: + PKCS #10: Certification Request Syntax + Specification Version 1.7. + ITU-T X.690: + Information technology - ASN.1 encoding rules: + Specification of Basic Encoding Rules (BER), + Canonical Encoding Rules (CER) and Distinguished + Encoding Rules (DER)."; + } + leaf attributes { + type binary; // FIXME: does this need to be mandatory? + description + "The 'attributes' field from the structure + CertificationRequestInfo as specified by RFC 2986, + Section 4.1 encoded using the ASN.1 distinguished + encoding rules (DER), as specified in ITU-T X.690."; + reference + "RFC 2986: + PKCS #10: Certification Request Syntax + Specification Version 1.7. + ITU-T X.690: + Information technology - ASN.1 encoding rules: + Specification of Basic Encoding Rules (BER), + Canonical Encoding Rules (CER) and Distinguished + Encoding Rules (DER)."; + } + } + output { + leaf certificate-signing-request { + type binary; + mandatory true; + description + "A CertificationRequest structure as specified by + RFC 2986, Section 4.2 encoded using the ASN.1 + distinguished encoding rules (DER), as specified + in ITU-T X.690."; + reference + "RFC 2986: + PKCS #10: Certification Request Syntax + Specification Version 1.7. + ITU-T X.690: + Information technology - ASN.1 encoding rules: + Specification of Basic Encoding Rules (BER), + Canonical Encoding Rules (CER) and Distinguished + Encoding Rules (DER)."; + } + } + } // generate-certificate-signing-request + } // asymmetric-key-pair-with-certs-grouping +} \ No newline at end of file