qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

crypto.json (17269B)


      1 # -*- Mode: Python -*-
      2 # vim: filetype=python
      3 #
      4 
      5 ##
      6 # = Cryptography
      7 ##
      8 
      9 ##
     10 # @QCryptoTLSCredsEndpoint:
     11 #
     12 # The type of network endpoint that will be using the credentials.
     13 # Most types of credential require different setup / structures
     14 # depending on whether they will be used in a server versus a
     15 # client.
     16 #
     17 # @client: the network endpoint is acting as the client
     18 #
     19 # @server: the network endpoint is acting as the server
     20 #
     21 # Since: 2.5
     22 ##
     23 { 'enum': 'QCryptoTLSCredsEndpoint',
     24   'prefix': 'QCRYPTO_TLS_CREDS_ENDPOINT',
     25   'data': ['client', 'server']}
     26 
     27 ##
     28 # @QCryptoSecretFormat:
     29 #
     30 # The data format that the secret is provided in
     31 #
     32 # @raw: raw bytes. When encoded in JSON only valid UTF-8 sequences can be used
     33 # @base64: arbitrary base64 encoded binary data
     34 #
     35 # Since: 2.6
     36 ##
     37 { 'enum': 'QCryptoSecretFormat',
     38   'prefix': 'QCRYPTO_SECRET_FORMAT',
     39   'data': ['raw', 'base64']}
     40 
     41 ##
     42 # @QCryptoHashAlgorithm:
     43 #
     44 # The supported algorithms for computing content digests
     45 #
     46 # @md5: MD5. Should not be used in any new code, legacy compat only
     47 # @sha1: SHA-1. Should not be used in any new code, legacy compat only
     48 # @sha224: SHA-224. (since 2.7)
     49 # @sha256: SHA-256. Current recommended strong hash.
     50 # @sha384: SHA-384. (since 2.7)
     51 # @sha512: SHA-512. (since 2.7)
     52 # @ripemd160: RIPEMD-160. (since 2.7)
     53 #
     54 # Since: 2.6
     55 ##
     56 { 'enum': 'QCryptoHashAlgorithm',
     57   'prefix': 'QCRYPTO_HASH_ALG',
     58   'data': ['md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'ripemd160']}
     59 
     60 ##
     61 # @QCryptoCipherAlgorithm:
     62 #
     63 # The supported algorithms for content encryption ciphers
     64 #
     65 # @aes-128: AES with 128 bit / 16 byte keys
     66 # @aes-192: AES with 192 bit / 24 byte keys
     67 # @aes-256: AES with 256 bit / 32 byte keys
     68 # @des: DES with 56 bit / 8 byte keys. Do not use except in VNC. (since 6.1)
     69 # @3des: 3DES(EDE) with 192 bit / 24 byte keys (since 2.9)
     70 # @cast5-128: Cast5 with 128 bit / 16 byte keys
     71 # @serpent-128: Serpent with 128 bit / 16 byte keys
     72 # @serpent-192: Serpent with 192 bit / 24 byte keys
     73 # @serpent-256: Serpent with 256 bit / 32 byte keys
     74 # @twofish-128: Twofish with 128 bit / 16 byte keys
     75 # @twofish-192: Twofish with 192 bit / 24 byte keys
     76 # @twofish-256: Twofish with 256 bit / 32 byte keys
     77 #
     78 # Since: 2.6
     79 ##
     80 { 'enum': 'QCryptoCipherAlgorithm',
     81   'prefix': 'QCRYPTO_CIPHER_ALG',
     82   'data': ['aes-128', 'aes-192', 'aes-256',
     83            'des', '3des',
     84            'cast5-128',
     85            'serpent-128', 'serpent-192', 'serpent-256',
     86            'twofish-128', 'twofish-192', 'twofish-256']}
     87 
     88 ##
     89 # @QCryptoCipherMode:
     90 #
     91 # The supported modes for content encryption ciphers
     92 #
     93 # @ecb: Electronic Code Book
     94 # @cbc: Cipher Block Chaining
     95 # @xts: XEX with tweaked code book and ciphertext stealing
     96 # @ctr: Counter (Since 2.8)
     97 #
     98 # Since: 2.6
     99 ##
    100 { 'enum': 'QCryptoCipherMode',
    101   'prefix': 'QCRYPTO_CIPHER_MODE',
    102   'data': ['ecb', 'cbc', 'xts', 'ctr']}
    103 
    104 ##
    105 # @QCryptoIVGenAlgorithm:
    106 #
    107 # The supported algorithms for generating initialization
    108 # vectors for full disk encryption. The 'plain' generator
    109 # should not be used for disks with sector numbers larger
    110 # than 2^32, except where compatibility with pre-existing
    111 # Linux dm-crypt volumes is required.
    112 #
    113 # @plain: 64-bit sector number truncated to 32-bits
    114 # @plain64: 64-bit sector number
    115 # @essiv: 64-bit sector number encrypted with a hash of the encryption key
    116 #
    117 # Since: 2.6
    118 ##
    119 { 'enum': 'QCryptoIVGenAlgorithm',
    120   'prefix': 'QCRYPTO_IVGEN_ALG',
    121   'data': ['plain', 'plain64', 'essiv']}
    122 
    123 ##
    124 # @QCryptoBlockFormat:
    125 #
    126 # The supported full disk encryption formats
    127 #
    128 # @qcow: QCow/QCow2 built-in AES-CBC encryption. Use only
    129 #        for liberating data from old images.
    130 # @luks: LUKS encryption format. Recommended for new images
    131 #
    132 # Since: 2.6
    133 ##
    134 { 'enum': 'QCryptoBlockFormat',
    135 #  'prefix': 'QCRYPTO_BLOCK_FORMAT',
    136   'data': ['qcow', 'luks']}
    137 
    138 ##
    139 # @QCryptoBlockOptionsBase:
    140 #
    141 # The common options that apply to all full disk
    142 # encryption formats
    143 #
    144 # @format: the encryption format
    145 #
    146 # Since: 2.6
    147 ##
    148 { 'struct': 'QCryptoBlockOptionsBase',
    149   'data': { 'format': 'QCryptoBlockFormat' }}
    150 
    151 ##
    152 # @QCryptoBlockOptionsQCow:
    153 #
    154 # The options that apply to QCow/QCow2 AES-CBC encryption format
    155 #
    156 # @key-secret: the ID of a QCryptoSecret object providing the
    157 #              decryption key. Mandatory except when probing image for
    158 #              metadata only.
    159 #
    160 # Since: 2.6
    161 ##
    162 { 'struct': 'QCryptoBlockOptionsQCow',
    163   'data': { '*key-secret': 'str' }}
    164 
    165 ##
    166 # @QCryptoBlockOptionsLUKS:
    167 #
    168 # The options that apply to LUKS encryption format
    169 #
    170 # @key-secret: the ID of a QCryptoSecret object providing the
    171 #              decryption key. Mandatory except when probing image for
    172 #              metadata only.
    173 #
    174 # Since: 2.6
    175 ##
    176 { 'struct': 'QCryptoBlockOptionsLUKS',
    177   'data': { '*key-secret': 'str' }}
    178 
    179 ##
    180 # @QCryptoBlockCreateOptionsLUKS:
    181 #
    182 # The options that apply to LUKS encryption format initialization
    183 #
    184 # @cipher-alg: the cipher algorithm for data encryption
    185 #              Currently defaults to 'aes-256'.
    186 # @cipher-mode: the cipher mode for data encryption
    187 #               Currently defaults to 'xts'
    188 # @ivgen-alg: the initialization vector generator
    189 #             Currently defaults to 'plain64'
    190 # @ivgen-hash-alg: the initialization vector generator hash
    191 #                  Currently defaults to 'sha256'
    192 # @hash-alg: the master key hash algorithm
    193 #            Currently defaults to 'sha256'
    194 # @iter-time: number of milliseconds to spend in
    195 #             PBKDF passphrase processing. Currently defaults
    196 #             to 2000. (since 2.8)
    197 #
    198 # Since: 2.6
    199 ##
    200 { 'struct': 'QCryptoBlockCreateOptionsLUKS',
    201   'base': 'QCryptoBlockOptionsLUKS',
    202   'data': { '*cipher-alg': 'QCryptoCipherAlgorithm',
    203             '*cipher-mode': 'QCryptoCipherMode',
    204             '*ivgen-alg': 'QCryptoIVGenAlgorithm',
    205             '*ivgen-hash-alg': 'QCryptoHashAlgorithm',
    206             '*hash-alg': 'QCryptoHashAlgorithm',
    207             '*iter-time': 'int'}}
    208 
    209 ##
    210 # @QCryptoBlockOpenOptions:
    211 #
    212 # The options that are available for all encryption formats
    213 # when opening an existing volume
    214 #
    215 # Since: 2.6
    216 ##
    217 { 'union': 'QCryptoBlockOpenOptions',
    218   'base': 'QCryptoBlockOptionsBase',
    219   'discriminator': 'format',
    220   'data': { 'qcow': 'QCryptoBlockOptionsQCow',
    221             'luks': 'QCryptoBlockOptionsLUKS' } }
    222 
    223 ##
    224 # @QCryptoBlockCreateOptions:
    225 #
    226 # The options that are available for all encryption formats
    227 # when initializing a new volume
    228 #
    229 # Since: 2.6
    230 ##
    231 { 'union': 'QCryptoBlockCreateOptions',
    232   'base': 'QCryptoBlockOptionsBase',
    233   'discriminator': 'format',
    234   'data': { 'qcow': 'QCryptoBlockOptionsQCow',
    235             'luks': 'QCryptoBlockCreateOptionsLUKS' } }
    236 
    237 ##
    238 # @QCryptoBlockInfoBase:
    239 #
    240 # The common information that applies to all full disk
    241 # encryption formats
    242 #
    243 # @format: the encryption format
    244 #
    245 # Since: 2.7
    246 ##
    247 { 'struct': 'QCryptoBlockInfoBase',
    248   'data': { 'format': 'QCryptoBlockFormat' }}
    249 
    250 ##
    251 # @QCryptoBlockInfoLUKSSlot:
    252 #
    253 # Information about the LUKS block encryption key
    254 # slot options
    255 #
    256 # @active: whether the key slot is currently in use
    257 # @key-offset: offset to the key material in bytes
    258 # @iters: number of PBKDF2 iterations for key material
    259 # @stripes: number of stripes for splitting key material
    260 #
    261 # Since: 2.7
    262 ##
    263 { 'struct': 'QCryptoBlockInfoLUKSSlot',
    264   'data': {'active': 'bool',
    265            '*iters': 'int',
    266            '*stripes': 'int',
    267            'key-offset': 'int' } }
    268 
    269 ##
    270 # @QCryptoBlockInfoLUKS:
    271 #
    272 # Information about the LUKS block encryption options
    273 #
    274 # @cipher-alg: the cipher algorithm for data encryption
    275 # @cipher-mode: the cipher mode for data encryption
    276 # @ivgen-alg: the initialization vector generator
    277 # @ivgen-hash-alg: the initialization vector generator hash
    278 # @hash-alg: the master key hash algorithm
    279 # @payload-offset: offset to the payload data in bytes
    280 # @master-key-iters: number of PBKDF2 iterations for key material
    281 # @uuid: unique identifier for the volume
    282 # @slots: information about each key slot
    283 #
    284 # Since: 2.7
    285 ##
    286 { 'struct': 'QCryptoBlockInfoLUKS',
    287   'data': {'cipher-alg': 'QCryptoCipherAlgorithm',
    288            'cipher-mode': 'QCryptoCipherMode',
    289            'ivgen-alg': 'QCryptoIVGenAlgorithm',
    290            '*ivgen-hash-alg': 'QCryptoHashAlgorithm',
    291            'hash-alg': 'QCryptoHashAlgorithm',
    292            'payload-offset': 'int',
    293            'master-key-iters': 'int',
    294            'uuid': 'str',
    295            'slots': [ 'QCryptoBlockInfoLUKSSlot' ] }}
    296 
    297 ##
    298 # @QCryptoBlockInfo:
    299 #
    300 # Information about the block encryption options
    301 #
    302 # Since: 2.7
    303 ##
    304 { 'union': 'QCryptoBlockInfo',
    305   'base': 'QCryptoBlockInfoBase',
    306   'discriminator': 'format',
    307   'data': { 'luks': 'QCryptoBlockInfoLUKS' } }
    308 
    309 ##
    310 # @QCryptoBlockLUKSKeyslotState:
    311 #
    312 # Defines state of keyslots that are affected by the update
    313 #
    314 # @active: The slots contain the given password and marked as active
    315 # @inactive: The slots are erased (contain garbage) and marked as inactive
    316 #
    317 # Since: 5.1
    318 ##
    319 { 'enum': 'QCryptoBlockLUKSKeyslotState',
    320   'data': [ 'active', 'inactive' ] }
    321 
    322 ##
    323 # @QCryptoBlockAmendOptionsLUKS:
    324 #
    325 # This struct defines the update parameters that activate/de-activate set
    326 # of keyslots
    327 #
    328 # @state: the desired state of the keyslots
    329 #
    330 # @new-secret: The ID of a QCryptoSecret object providing the password to be
    331 #              written into added active keyslots
    332 #
    333 # @old-secret: Optional (for deactivation only)
    334 #              If given will deactivate all keyslots that
    335 #              match password located in QCryptoSecret with this ID
    336 #
    337 # @iter-time: Optional (for activation only)
    338 #             Number of milliseconds to spend in
    339 #             PBKDF passphrase processing for the newly activated keyslot.
    340 #             Currently defaults to 2000.
    341 #
    342 # @keyslot: Optional. ID of the keyslot to activate/deactivate.
    343 #           For keyslot activation, keyslot should not be active already
    344 #           (this is unsafe to update an active keyslot),
    345 #           but possible if 'force' parameter is given.
    346 #           If keyslot is not given, first free keyslot will be written.
    347 #
    348 #           For keyslot deactivation, this parameter specifies the exact
    349 #           keyslot to deactivate
    350 #
    351 # @secret: Optional. The ID of a QCryptoSecret object providing the
    352 #          password to use to retrieve current master key.
    353 #          Defaults to the same secret that was used to open the image
    354 #
    355 # Since: 5.1
    356 ##
    357 { 'struct': 'QCryptoBlockAmendOptionsLUKS',
    358   'data': { 'state': 'QCryptoBlockLUKSKeyslotState',
    359             '*new-secret': 'str',
    360             '*old-secret': 'str',
    361             '*keyslot': 'int',
    362             '*iter-time': 'int',
    363             '*secret': 'str' } }
    364 
    365 ##
    366 # @QCryptoBlockAmendOptions:
    367 #
    368 # The options that are available for all encryption formats
    369 # when amending encryption settings
    370 #
    371 # Since: 5.1
    372 ##
    373 { 'union': 'QCryptoBlockAmendOptions',
    374   'base': 'QCryptoBlockOptionsBase',
    375   'discriminator': 'format',
    376   'data': {
    377           'luks': 'QCryptoBlockAmendOptionsLUKS' } }
    378 
    379 ##
    380 # @SecretCommonProperties:
    381 #
    382 # Properties for objects of classes derived from secret-common.
    383 #
    384 # @loaded: if true, the secret is loaded immediately when applying this option
    385 #          and will probably fail when processing the next option. Don't use;
    386 #          only provided for compatibility. (default: false)
    387 #
    388 # @format: the data format that the secret is provided in (default: raw)
    389 #
    390 # @keyid: the name of another secret that should be used to decrypt the
    391 #         provided data. If not present, the data is assumed to be unencrypted.
    392 #
    393 # @iv: the random initialization vector used for encryption of this particular
    394 #      secret. Should be a base64 encrypted string of the 16-byte IV. Mandatory
    395 #      if @keyid is given. Ignored if @keyid is absent.
    396 #
    397 # Features:
    398 # @deprecated: Member @loaded is deprecated.  Setting true doesn't make sense,
    399 #              and false is already the default.
    400 #
    401 # Since: 2.6
    402 ##
    403 { 'struct': 'SecretCommonProperties',
    404   'data': { '*loaded': { 'type': 'bool', 'features': ['deprecated'] },
    405             '*format': 'QCryptoSecretFormat',
    406             '*keyid': 'str',
    407             '*iv': 'str' } }
    408 
    409 ##
    410 # @SecretProperties:
    411 #
    412 # Properties for secret objects.
    413 #
    414 # Either @data or @file must be provided, but not both.
    415 #
    416 # @data: the associated with the secret from
    417 #
    418 # @file: the filename to load the data associated with the secret from
    419 #
    420 # Since: 2.6
    421 ##
    422 { 'struct': 'SecretProperties',
    423   'base': 'SecretCommonProperties',
    424   'data': { '*data': 'str',
    425             '*file': 'str' } }
    426 
    427 ##
    428 # @SecretKeyringProperties:
    429 #
    430 # Properties for secret_keyring objects.
    431 #
    432 # @serial: serial number that identifies a key to get from the kernel
    433 #
    434 # Since: 5.1
    435 ##
    436 { 'struct': 'SecretKeyringProperties',
    437   'base': 'SecretCommonProperties',
    438   'data': { 'serial': 'int32' } }
    439 
    440 ##
    441 # @TlsCredsProperties:
    442 #
    443 # Properties for objects of classes derived from tls-creds.
    444 #
    445 # @verify-peer: if true the peer credentials will be verified once the
    446 #               handshake is completed.  This is a no-op for anonymous
    447 #               credentials. (default: true)
    448 #
    449 # @dir: the path of the directory that contains the credential files
    450 #
    451 # @endpoint: whether the QEMU network backend that uses the credentials will be
    452 #            acting as a client or as a server (default: client)
    453 #
    454 # @priority: a gnutls priority string as described at
    455 #            https://gnutls.org/manual/html_node/Priority-Strings.html
    456 #
    457 # Since: 2.5
    458 ##
    459 { 'struct': 'TlsCredsProperties',
    460   'data': { '*verify-peer': 'bool',
    461             '*dir': 'str',
    462             '*endpoint': 'QCryptoTLSCredsEndpoint',
    463             '*priority': 'str' } }
    464 
    465 ##
    466 # @TlsCredsAnonProperties:
    467 #
    468 # Properties for tls-creds-anon objects.
    469 #
    470 # @loaded: if true, the credentials are loaded immediately when applying this
    471 #          option and will ignore options that are processed later. Don't use;
    472 #          only provided for compatibility. (default: false)
    473 #
    474 # Features:
    475 # @deprecated: Member @loaded is deprecated.  Setting true doesn't make sense,
    476 #              and false is already the default.
    477 #
    478 # Since: 2.5
    479 ##
    480 { 'struct': 'TlsCredsAnonProperties',
    481   'base': 'TlsCredsProperties',
    482   'data': { '*loaded': { 'type': 'bool', 'features': ['deprecated'] } } }
    483 
    484 ##
    485 # @TlsCredsPskProperties:
    486 #
    487 # Properties for tls-creds-psk objects.
    488 #
    489 # @loaded: if true, the credentials are loaded immediately when applying this
    490 #          option and will ignore options that are processed later. Don't use;
    491 #          only provided for compatibility. (default: false)
    492 #
    493 # @username: the username which will be sent to the server.  For clients only.
    494 #            If absent, "qemu" is sent and the property will read back as an
    495 #            empty string.
    496 #
    497 # Features:
    498 # @deprecated: Member @loaded is deprecated.  Setting true doesn't make sense,
    499 #              and false is already the default.
    500 #
    501 # Since: 3.0
    502 ##
    503 { 'struct': 'TlsCredsPskProperties',
    504   'base': 'TlsCredsProperties',
    505   'data': { '*loaded': { 'type': 'bool', 'features': ['deprecated'] },
    506             '*username': 'str' } }
    507 
    508 ##
    509 # @TlsCredsX509Properties:
    510 #
    511 # Properties for tls-creds-x509 objects.
    512 #
    513 # @loaded: if true, the credentials are loaded immediately when applying this
    514 #          option and will ignore options that are processed later. Don't use;
    515 #          only provided for compatibility. (default: false)
    516 #
    517 # @sanity-check: if true, perform some sanity checks before using the
    518 #                credentials (default: true)
    519 #
    520 # @passwordid: For the server-key.pem and client-key.pem files which contain
    521 #              sensitive private keys, it is possible to use an encrypted
    522 #              version by providing the @passwordid parameter.  This provides
    523 #              the ID of a previously created secret object containing the
    524 #              password for decryption.
    525 #
    526 # Features:
    527 # @deprecated: Member @loaded is deprecated.  Setting true doesn't make sense,
    528 #              and false is already the default.
    529 #
    530 # Since: 2.5
    531 ##
    532 { 'struct': 'TlsCredsX509Properties',
    533   'base': 'TlsCredsProperties',
    534   'data': { '*loaded': { 'type': 'bool', 'features': ['deprecated'] },
    535             '*sanity-check': 'bool',
    536             '*passwordid': 'str' } }
    537 ##
    538 # @QCryptoAkCipherAlgorithm:
    539 #
    540 # The supported algorithms for asymmetric encryption ciphers
    541 #
    542 # @rsa: RSA algorithm
    543 #
    544 # Since: 7.1
    545 ##
    546 { 'enum': 'QCryptoAkCipherAlgorithm',
    547   'prefix': 'QCRYPTO_AKCIPHER_ALG',
    548   'data': ['rsa']}
    549 
    550 ##
    551 # @QCryptoAkCipherKeyType:
    552 #
    553 # The type of asymmetric keys.
    554 #
    555 # Since: 7.1
    556 ##
    557 { 'enum': 'QCryptoAkCipherKeyType',
    558   'prefix': 'QCRYPTO_AKCIPHER_KEY_TYPE',
    559   'data': ['public', 'private']}
    560 
    561 ##
    562 # @QCryptoRSAPaddingAlgorithm:
    563 #
    564 # The padding algorithm for RSA.
    565 #
    566 # @raw: no padding used
    567 # @pkcs1: pkcs1#v1.5
    568 #
    569 # Since: 7.1
    570 ##
    571 { 'enum': 'QCryptoRSAPaddingAlgorithm',
    572   'prefix': 'QCRYPTO_RSA_PADDING_ALG',
    573   'data': ['raw', 'pkcs1']}
    574 
    575 ##
    576 # @QCryptoAkCipherOptionsRSA:
    577 #
    578 # Specific parameters for RSA algorithm.
    579 #
    580 # @hash-alg: QCryptoHashAlgorithm
    581 # @padding-alg: QCryptoRSAPaddingAlgorithm
    582 #
    583 # Since: 7.1
    584 ##
    585 { 'struct': 'QCryptoAkCipherOptionsRSA',
    586   'data': { 'hash-alg':'QCryptoHashAlgorithm',
    587             'padding-alg': 'QCryptoRSAPaddingAlgorithm'}}
    588 
    589 ##
    590 # @QCryptoAkCipherOptions:
    591 #
    592 # The options that are available for all asymmetric key algorithms
    593 # when creating a new QCryptoAkCipher.
    594 #
    595 # Since: 7.1
    596 ##
    597 { 'union': 'QCryptoAkCipherOptions',
    598   'base': { 'alg': 'QCryptoAkCipherAlgorithm' },
    599   'discriminator': 'alg',
    600   'data': { 'rsa': 'QCryptoAkCipherOptionsRSA' }}