📄 cryptacl.h
字号:
RANGE( 0, 300 ) ),
MKACL_B( /* Whether to init cryptlib async'ly */
CRYPT_OPTION_MISC_ASYNCINIT,
ST_NONE, ST_USER_SO, ACCESS_RWx_RWx,
ROUTE( OBJECT_TYPE_USER ) ),
MKACL_B( /* Protect against side-channel attacks */
CRYPT_OPTION_MISC_SIDECHANNELPROTECTION,
ST_NONE, ST_USER_SO, ACCESS_RWx_RWx,
ROUTE( OBJECT_TYPE_USER ) ),
MKACL( /* Whether in-mem.opts match on-disk ones */
/* This is a special-case boolean attribute value that can only be
set to FALSE to indicate that the config options should be
flushed to disk */
CRYPT_OPTION_CONFIGCHANGED, ATTRIBUTE_VALUE_BOOLEAN,
ST_NONE, ST_USER_ANY, ACCESS_RWx_RWx, 0,
ROUTE( OBJECT_TYPE_USER ),
RANGE( FALSE, FALSE ) ),
MKACL_B( /* Whether self-test was completed and OK */
CRYPT_OPTION_SELFTESTOK,
ST_NONE, ST_USER_ANY, ACCESS_RWx_RWx,
ROUTE( OBJECT_TYPE_USER ) )
MKACL_END()
};
/****************************************************************************
* *
* Context ACLs *
* *
****************************************************************************/
static const FAR_BSS int allowedPKCKeysizes[] = {
sizeof( CRYPT_PKCINFO_DLP ), sizeof( CRYPT_PKCINFO_RSA ), CRYPT_ERROR };
static const FAR_BSS int allowedKeyingAlgos[] = {
CRYPT_ALGO_MD5, CRYPT_ALGO_SHA, CRYPT_ALGO_RIPEMD160,
CRYPT_ALGO_HMAC_SHA, CRYPT_ERROR };
/* Context attributes */
static const FAR_BSS ATTRIBUTE_ACL contextACL[] = {
MKACL_N( /* Algorithm */
CRYPT_CTXINFO_ALGO,
ST_CTX_ANY, ST_NONE, ACCESS_Rxx_Rxx,
ROUTE( OBJECT_TYPE_CONTEXT ),
RANGE( CRYPT_ALGO_NONE + 1, CRYPT_ALGO_LAST - 1 ) ),
MKACL_N( /* Mode */
CRYPT_CTXINFO_MODE,
ST_CTX_CONV, ST_NONE, ACCESS_Rxx_RWx,
ROUTE( OBJECT_TYPE_CONTEXT ),
RANGE( CRYPT_MODE_NONE + 1, CRYPT_MODE_LAST - 1 ) ),
MKACL_S( /* Algorithm name */
CRYPT_CTXINFO_NAME_ALGO,
ST_CTX_ANY, ST_NONE, ACCESS_Rxx_Rxx,
ROUTE( OBJECT_TYPE_CONTEXT ),
RANGE( 3, CRYPT_MAX_TEXTSIZE ) ),
MKACL_S( /* Mode name */
CRYPT_CTXINFO_NAME_MODE,
ST_CTX_CONV, ST_NONE, ACCESS_Rxx_Rxx,
ROUTE( OBJECT_TYPE_CONTEXT ),
RANGE( 3, CRYPT_MAX_TEXTSIZE ) ),
MKACL_N( /* Key size in bytes */
CRYPT_CTXINFO_KEYSIZE,
ST_CTX_CONV | ST_CTX_PKC | ST_CTX_MAC, ST_NONE, ACCESS_Rxx_RWx,
ROUTE( OBJECT_TYPE_CONTEXT ),
RANGE( bitsToBytes( MIN_KEYSIZE_BITS ), CRYPT_MAX_PKCSIZE ) ),
MKACL_N( /* Block size in bytes */
CRYPT_CTXINFO_BLOCKSIZE,
ST_CTX_ANY, ST_NONE, ACCESS_Rxx_Rxx,
ROUTE( OBJECT_TYPE_CONTEXT ),
RANGE( 1, CRYPT_MAX_HASHSIZE ) ),
MKACL_N( /* IV size in bytes */
CRYPT_CTXINFO_IVSIZE,
ST_CTX_CONV, ST_NONE, ACCESS_Rxx_Rxx,
ROUTE( OBJECT_TYPE_CONTEXT ),
RANGE( 8, CRYPT_MAX_IVSIZE ) ),
MKACL_EX( /* Key processing algorithm */
/* The allowed algorithm range is a bit peculiar, usually we only
allow HMAC-SHA1 for normal key derivation, however PGP uses
plain hash algorithms for the derivation and although these
are never applied, they are stored in the context when PGP keys
are loaded */
CRYPT_CTXINFO_KEYING_ALGO, ATTRIBUTE_VALUE_NUMERIC,
ST_CTX_CONV | ST_CTX_MAC, ST_NONE, ACCESS_Rxx_RWD, 0,
ROUTE( OBJECT_TYPE_CONTEXT ),
RANGE_ALLOWEDVALUES, allowedKeyingAlgos ),
MKACL_N( /* Key processing iterations */
CRYPT_CTXINFO_KEYING_ITERATIONS,
ST_CTX_CONV | ST_CTX_MAC, ST_NONE, ACCESS_Rxx_RWD,
ROUTE( OBJECT_TYPE_CONTEXT ),
RANGE( 1, 20000 ) ),
MKACL_S( /* Key processing salt */
CRYPT_CTXINFO_KEYING_SALT,
ST_CTX_CONV | ST_CTX_MAC, ST_NONE, ACCESS_Rxx_RWD,
ROUTE( OBJECT_TYPE_CONTEXT ),
RANGE( 8, CRYPT_MAX_HASHSIZE ) ),
MKACL_S_EX( /* Value used to derive key */
CRYPT_CTXINFO_KEYING_VALUE,
ST_CTX_CONV | ST_CTX_MAC, ST_NONE, ACCESS_xxx_xWx, ATTRIBUTE_FLAG_TRIGGER,
ROUTE( OBJECT_TYPE_CONTEXT ),
RANGE( 1, MAX_ATTRIBUTE_SIZE ) ),
#ifdef USE_FIPS140
MKACL_S_EX( /* Key */
CRYPT_CTXINFO_KEY,
ST_CTX_CONV | ST_CTX_MAC, ST_NONE, ACCESS_INT_xxx_xWx, ATTRIBUTE_FLAG_TRIGGER,
ROUTE( OBJECT_TYPE_CONTEXT ),
RANGE( bitsToBytes( MIN_KEYSIZE_BITS ), CRYPT_MAX_KEYSIZE ) ),
MKACL_EX( /* Public-key components */
CRYPT_CTXINFO_KEY_COMPONENTS, ATTRIBUTE_VALUE_STRING,
ST_CTX_PKC, ST_NONE, ACCESS_INT_xxx_xWx, ATTRIBUTE_FLAG_TRIGGER,
ROUTE( OBJECT_TYPE_CONTEXT ),
RANGE_ALLOWEDVALUES, allowedPKCKeysizes ),
#else
MKACL_S_EX( /* Key */
CRYPT_CTXINFO_KEY,
ST_CTX_CONV | ST_CTX_MAC, ST_NONE, ACCESS_xxx_xWx, ATTRIBUTE_FLAG_TRIGGER,
ROUTE( OBJECT_TYPE_CONTEXT ),
RANGE( bitsToBytes( MIN_KEYSIZE_BITS ), CRYPT_MAX_KEYSIZE ) ),
MKACL_EX( /* Public-key components */
CRYPT_CTXINFO_KEY_COMPONENTS, ATTRIBUTE_VALUE_STRING,
ST_CTX_PKC, ST_NONE, ACCESS_xxx_xWx, ATTRIBUTE_FLAG_TRIGGER,
ROUTE( OBJECT_TYPE_CONTEXT ),
RANGE_ALLOWEDVALUES, allowedPKCKeysizes ),
#endif /* FIPS 140 keying rules */
MKACL_S( /* IV */
CRYPT_CTXINFO_IV,
ST_CTX_CONV, ST_NONE, ACCESS_RWx_RWx,
ROUTE( OBJECT_TYPE_CONTEXT ),
RANGE( 8, CRYPT_MAX_IVSIZE ) ),
MKACL_S( /* Hash value */
CRYPT_CTXINFO_HASHVALUE,
ST_CTX_HASH | ST_CTX_MAC, ST_NONE, ACCESS_RxD_RxD,
ROUTE( OBJECT_TYPE_CONTEXT ),
RANGE( 16, CRYPT_MAX_HASHSIZE ) ),
MKACL_S( /* Label for private/secret key */
CRYPT_CTXINFO_LABEL,
ST_CTX_CONV | ST_CTX_PKC | ST_CTX_MAC, ST_NONE, ACCESS_Rxx_RWD,
ROUTE( OBJECT_TYPE_CONTEXT ),
RANGE( 1, CRYPT_MAX_TEXTSIZE ) )
MKACL_END()
};
/****************************************************************************
* *
* Certificate ACLs *
* *
****************************************************************************/
static const FAR_BSS RANGE_SUBRANGE_TYPE allowedCertCursorSubranges[] = {
{ CRYPT_CURSOR_FIRST, CRYPT_CURSOR_LAST },
{ CRYPT_CERTINFO_FIRST_EXTENSION, CRYPT_CERTINFO_LAST_EXTENSION },
{ CRYPT_ERROR, CRYPT_ERROR } };
static const FAR_BSS int allowedIPAddressSizes[] = \
{ 4, 16, CRYPT_ERROR };
static const FAR_BSS ATTRIBUTE_ACL subACL_CertinfoFingerprintSHA[] = {
MKACL_S( /* Certs: General access */
CRYPT_CERTINFO_FINGERPRINT_SHA,
ST_CERT_CERT | ST_CERT_CERTCHAIN, ST_NONE, ACCESS_Rxx_xxx,
ROUTE( OBJECT_TYPE_CERTIFICATE ),
RANGE( 20, 20 ) ),
MKACL_S( /* Selected other objs (requests, PKI users): Int.access only */
CRYPT_CERTINFO_FINGERPRINT_SHA,
ST_CERT_ANY_CERT | ST_CERT_REQ_REV | ST_CERT_PKIUSER, ST_NONE, ACCESS_INT_Rxx_xxx,
ROUTE( OBJECT_TYPE_CERTIFICATE ),
RANGE( 20, 20 ) ),
MKACL_END_SUBACL()
};
static const FAR_BSS ATTRIBUTE_ACL subACL_CertinfoSerialNumber[] = {
MKACL_S( /* Certificates: General access */
/* In theory we shouldn't allow this access since the serial number
should be chosen by the CA, however it's required for SCEP, which
requires that the cert serial number contain a transaction ID (!!)
so we make it writeable for internal access */
CRYPT_CERTINFO_SERIALNUMBER,
ST_CERT_CERT, ST_NONE, ACCESS_SPECIAL_Rxx_RWx_Rxx_Rxx,
ROUTE( OBJECT_TYPE_CERTIFICATE ),
RANGE( 1, 32 ) ),
MKACL_S( /* Everything else: Read-only */
CRYPT_CERTINFO_SERIALNUMBER,
ST_CERT_CERTCHAIN | ST_CERT_ATTRCERT | ST_CERT_CRL, ST_NONE, ACCESS_Rxx_Rxx,
ROUTE( OBJECT_TYPE_CERTIFICATE ),
RANGE( 1, 32 ) ),
MKACL_END_SUBACL()
};
/* Certificate: General info */
static const FAR_BSS ATTRIBUTE_ACL certificateACL[] = {
MKACL_B( /* Cert is self-signed */
CRYPT_CERTINFO_SELFSIGNED,
ST_CERT_ANY_CERT, ST_NONE, ACCESS_Rxx_RWD,
ROUTE( OBJECT_TYPE_CERTIFICATE ) ),
MKACL_B( /* Cert is signed and immutable */
CRYPT_CERTINFO_IMMUTABLE,
ST_CERT_ANY, ST_NONE, ACCESS_Rxx_Rxx,
ROUTE( OBJECT_TYPE_CERTIFICATE ) ),
MKACL_B( /* Cert is a magic just-works cert */
CRYPT_CERTINFO_XYZZY,
ST_CERT_CERT | ST_CERT_CERTCHAIN, ST_NONE, ACCESS_Rxx_RWx,
ROUTE( OBJECT_TYPE_CERTIFICATE ) ),
MKACL_N( /* Certificate object type */
CRYPT_CERTINFO_CERTTYPE,
ST_CERT_ANY, ST_NONE, ACCESS_Rxx_Rxx,
ROUTE( OBJECT_TYPE_CERTIFICATE ),
RANGE( CRYPT_CERTTYPE_NONE + 1, CRYPT_CERTTYPE_LAST - 1 ) ),
MKACL_S( /* Certificate fingerprint: MD5 */
CRYPT_CERTINFO_FINGERPRINT,
ST_CERT_CERT | ST_CERT_CERTCHAIN, ST_NONE, ACCESS_Rxx_xxx,
ROUTE( OBJECT_TYPE_CERTIFICATE ),
RANGE( 16, 16 ) ),
MKACL_X( /* Certificate fingerprint: SHA-1 */
CRYPT_CERTINFO_FINGERPRINT_SHA,
ST_CERT_ANY_CERT | ST_CERT_REQ_REV | ST_CERT_PKIUSER, ST_NONE, ACCESS_Rxx_xxx,
ROUTE( OBJECT_TYPE_CERTIFICATE ),
subACL_CertinfoFingerprintSHA ),
MKACL_N( /* Cursor mgt: Rel.pos in chain/CRL/OCSP */
/* The subtype flag is somewhat unusual since it includes as an
allowed subtype a cert, which doesn't have further cert components.
The reason for this is that when the chain is created it's just a
collection of certs, it isn't until all of them are available that
one can be marked the leaf cert and its type changed to cert chain.
Since an object's subtype can't be changed after it's created, we
have to allow cursor movement commands to certs in case one of
them is really the leaf in a cert chain - it's because of the way
the leaf can act as both a cert and a cert chain. A pure cert
looks just like a one-cert chain, so there's no harm in sending a
movement command to a cert that isn't a chain leaf */
CRYPT_CERTINFO_CURRENT_CERTIFICATE,
ST_CERT_CERT | ST_CERT_CERTCHAIN | ST_CERT_CRL | ST_CERT_RTCS_REQ | \
ST_CERT_RTCS_RESP | ST_CERT_OCSP_REQ | \
ST_CERT_OCSP_RESP, ST_NONE, ACCESS_xWx_xWx,
ROUTE( OBJECT_TYPE_CERTIFICATE ),
RANGE( CRYPT_CURSOR_FIRST, CRYPT_CURSOR_LAST ) ),
MKACL_EX( /* Cursor mgt: Rel.pos.or abs.extension */
CRYPT_CERTINFO_CURRENT_EXTENSION, ATTRIBUTE_VALUE_NUMERIC,
ST_CERT_ANY, ST_NONE, ACCESS_RWx_RWx, 0,
ROUTE( OBJECT_TYPE_CERTIFICATE ),
RANGE_SUBRANGES, allowedCertCursorSubranges ),
MKACL_EX( /* Cursor mgt: Rel.pos.or abs.field in ext */
CRYPT_CERTINFO_CURRENT_FIELD, ATTRIBUTE_VALUE_NUMERIC,
ST_CERT_ANY, ST_NONE, ACCESS_RWx_RWx, 0,
ROUTE( OBJECT_TYPE_CERTIFICATE ),
RANGE_SUBRANGES, allowedCertCursorSubranges ),
MKACL_N( /* Cursor mgt: Rel.pos in multival.field */
/* This value is readable but always returns the basic field value
since it represents multiple instantiations of the same field */
CRYPT_CERTINFO_CURRENT_COMPONENT,
ST_CERT_ANY, ST_NONE, ACCESS_RWx_RWx,
ROUTE( OBJECT_TYPE_CERTIFICATE ),
RANGE( CRYPT_CURSOR_FIRST, CRYPT_CURSOR_LAST ) ),
MKACL_N( /* Usage that cert is trusted for */
CRYPT_CERTINFO_TRUSTED_USAGE,
ST_CERT_CERT | ST_CERT_CERTCHAIN, ST_NONE, ACCESS_RWD_RWD,
ROUTE( OBJECT_TYPE_CERTIFICATE ),
RANGE( CRYPT_KEYUSAGE_NONE, CRYPT_KEYUSAGE_LAST - 1 ) ),
MKACL_B( /* Whether cert is implicitly trusted */
CRYPT_CERTINFO_TRUSTED_IMPLICIT,
ST_CERT_CERT | ST_CERT_CERTCHAIN, ST_NONE, ACCESS_RWD_xxx,
ROUTE( OBJECT_TYPE_CERTIFICATE ) ),
MKACL_N( /* Amount of detail to include in sigs.*/
CRYPT_CERTINFO_SIGNATURELEVEL,
ST_CERT_OCSP_REQ, ST_NONE, ACCESS_RWx_RWx,
ROUTE( OBJECT_TYPE_CERTIFICATE ),
RANGE( CRYPT_SIGNATURELEVEL_NONE, CRYPT_SIGNATURELEVEL_ALL ) ),
MKACL_N( /* Cert.format version */
CRYPT_CERTINFO_VERSION,
ST_CERT_CERT | ST_CERT_CERTCHAIN | ST_CERT_ATTRCERT | ST_CERT_CRL | \
ST_CERT_RTCS_REQ | ST_CERT_RTCS_RESP | \
ST_CERT_OCSP_REQ | ST_CERT_OCSP_RESP, ST_NONE, ACCESS_Rxx_Rxx,
ROUTE( OBJECT_TYPE_CERTIFICATE ),
RANGE( 1, 3 ) ),
MKACL_X( /* Serial number */
CRYPT_CERTINFO_SERIALNUMBER,
ST_CERT_CERT | ST_CERT_CERTCHAIN | ST_CERT_ATTRCERT | ST_CERT_CRL | \
ST_CERT_REQ_CERT, ST_NONE, ACCESS_Rxx_RWD,
ROUTE( OBJECT_TYPE_CERTIFICATE ),
subACL_CertinfoSerialNumber ),
MKACL_O( /* Public key */
CRYPT_CERTINFO_SUBJECTPUBLICKEYINFO,
ST_CERT_ANY_CERT, ST_NONE, ACCESS_xxx_xWx,
ROUTE( OBJECT_TYPE_CERTIFICATE ), &objectCtxPKC ),
MKACL_O( /* User certificate */
CRYPT_CERTINFO_CERTIFICATE,
ST_CERT_CERTCHAIN | ST_CERT_CRL | ST_CERT_REQ_CERT | ST_CERT_REQ_REV | \
ST_CERT_RTCS_REQ | ST_CERT_OCSP_REQ, ST_NONE, ACCESS_xxx_xWx,
ROUTE( OBJECT_TYPE_CERTIFICATE ), &objectCertificate ),
MKACL_O( /* CA certificate */
CRYPT_CERTINFO_CACERTIFICATE,
ST_CERT_OCSP_REQ, ST_NONE, ACCESS_xxx_xWx,
ROUTE( OBJECT_TYPE_CERTIFICATE ), &objectCertificate ),
MKACL_N( /* Issuer DN */
CRYPT_CERTINFO_ISSUERNAME,
ST_CERT_CERT | ST_CERT_CERTCHAIN | ST_CERT_ATTRCERT | \
ST_CERT_CRL | ST_CERT_OCSP_RESP, ST_NONE, ACCESS_RWx_RWx,
ROUTE( OBJECT_TYPE_CERTIFICATE ),
RANGE_SELECTVALUE ),
MKACL_T( /* Cert valid-from time */
CRYPT_CERTINFO_VALIDFROM,
ST_CERT_CERT | ST_CERT_REQ_CERT | ST_CERT_CERTCHAIN | \
ST_CERT_ATTRCERT, ST_NONE, ACCESS_Rxx_RWD,
ROUTE( OBJECT_TYPE_CERTIFICATE ) ),
MKACL_T( /* Cert valid-to time */
CRYPT_CERTINFO_VALIDTO,
ST_CERT_CERT | ST_CERT_REQ_CERT | ST_CERT_CERTCHAIN | \
ST_CERT_ATTRCERT, ST_NONE, ACCESS_Rxx_RWD,
ROUTE( OBJECT_TYPE_CERTIFICATE ) ),
MKACL_N( /* Subject DN */
CRYPT_CERTINFO_SUBJECTNAME,
ST_CERT_ANY_CERT | ST_CERT_ATTRCERT | ST_CERT_PKIUSER, ST_NONE, ACCESS_RWx_RWD,
ROUTE( OBJECT_TYPE_CERTIFICATE ),
RANGE_SELECTVALUE ),
MKACL_S( /* Issuer unique ID */
CRYPT_CERTINFO_ISSUERUNIQUEID,
ST_CERT_CERT, ST_NONE, ACCESS_Rxx_Rxx,
ROUTE( OBJECT_TYPE_CERTIFICATE ),
RANGE( 2, CRYPT_MAX_TEXTSIZE ) ),
MKACL_S( /* Subject unique ID */
CRYPT_CERTINFO_SUBJECTUNIQUEID,
ST_CERT_CERT, ST_NONE, ACCESS_Rxx_Rxx,
ROUTE( OBJECT_TYPE_CERTIFICATE ),
RANGE( 2, CRYPT_MAX_TEXTSIZE ) ),
MKACL_O( /* Cert.request (DN + public key) */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -