Хосе Encrypter возвращается ноль - PullRequest
1 голос
/ 24 января 2020

Я использую JOSESwift . Когда я использую метод Encrypter, он возвращает nil без подробностей какой-либо ошибки. Ниже приведен мой пример кода. Может кто-нибудь помочь, пожалуйста, почему метод Encrypter возвращает nil?

Намерение: я пытаюсь установить ключ переноса для моего объекта JWE, и из JOSESwift я могу понять, что Encrypter принимает этот ключ cek.

// Jose implementation.
        let joseHeader = JWEHeader(algorithm: .direct,
                                   encryptionAlgorithm: .A128CBCHS256)
        let joseEncrypter = Encrypter(keyEncryptionAlgorithm: .RSAOAEP,
                                      encryptionKey: cekKeyData,
                                      contentEncyptionAlgorithm: .A128CBCHS256)!
        let josePayload = Payload(Data(base64Encoded: jsonString)!)

        let joseJWE = try? JWE(header: joseHeader, payload: josePayload, encrypter: joseEncrypter)

1 Ответ

0 голосов
/ 24 января 2020

Я подозреваю, что вы передаете неправильный тип ключа или неправильно выбираете .RSAOAEP в качестве алгоритма, и это означает, что .direct.

///   - key: The key used to perform the encryption. If the `keyEncryptionAlgorithm` is `.direct`, the
///          `encryptionKey` is the shared symmetric content encryption key. Otherwise the `encryptionKey` is the
///           public key of the receiver. See [RFC-7516](https://tools.ietf.org/html/rfc7516#section-5.1) for
///           details.

nil возвращается только в следующем случае из этот код с учетом переданных параметров:

switch (keyEncryptionAlgorithm, contentEncyptionAlgorithm) {
case (.RSA1_5, .A256CBCHS512), (.RSAOAEP, .A256CBCHS512), (.RSAOAEP256, .A256CBCHS512), (.RSA1_5, .A128CBCHS256), (.RSAOAEP, .A128CBCHS256), (.RSAOAEP256, .A128CBCHS256):
    guard type(of: key) is RSAEncrypter.KeyType.Type else {
        return nil
    }
    // ...

Это указывает на то, что cekKeyData не относится к типу RSAEncrypter.KeyType. Я подозреваю, что это сгенерированный ключ AES.

...