-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Multi-Recipient encryption for client credentials #262
base: main
Are you sure you want to change the base?
Changes from all commits
650a501
6fab38d
8c86259
d25ce74
36cab1d
8b569b9
5a9e19d
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -4,11 +4,12 @@ import ( | |||||||||||||||||||||||||||||||||||||||||||||||||
"crypto/rsa" | ||||||||||||||||||||||||||||||||||||||||||||||||||
"fmt" | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
"filippo.io/age" | ||||||||||||||||||||||||||||||||||||||||||||||||||
"filippo.io/age/agessh" | ||||||||||||||||||||||||||||||||||||||||||||||||||
"golang.org/x/crypto/ssh" | ||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
func EncryptRSA(pubKey *rsa.PublicKey, plaintext []byte) ([]byte, error) { | ||||||||||||||||||||||||||||||||||||||||||||||||||
func CreateRSARecipient(pubKey *rsa.PublicKey) (*agessh.RSARecipient, error) { | ||||||||||||||||||||||||||||||||||||||||||||||||||
sshPubKey, err := ssh.NewPublicKey(pubKey) | ||||||||||||||||||||||||||||||||||||||||||||||||||
if err != nil { | ||||||||||||||||||||||||||||||||||||||||||||||||||
return nil, fmt.Errorf("jwk-rsa: failed to convert public key to ssh format: %w", err) | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -19,7 +20,16 @@ func EncryptRSA(pubKey *rsa.PublicKey, plaintext []byte) ([]byte, error) { | |||||||||||||||||||||||||||||||||||||||||||||||||
return nil, fmt.Errorf("jwk-rsa: failed to create recipient: %w", err) | ||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
ciphertext, err := ageEncrypt(recipient, plaintext) | ||||||||||||||||||||||||||||||||||||||||||||||||||
return recipient, nil | ||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
func EncryptRSA(pubKey *rsa.PublicKey, plaintext []byte) ([]byte, error) { | ||||||||||||||||||||||||||||||||||||||||||||||||||
recipient, err := CreateRSARecipient(pubKey) | ||||||||||||||||||||||||||||||||||||||||||||||||||
if err != nil { | ||||||||||||||||||||||||||||||||||||||||||||||||||
return nil, err | ||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
ciphertext, err := ageEncrypt([]age.Recipient{recipient}, plaintext) | ||||||||||||||||||||||||||||||||||||||||||||||||||
if err != nil { | ||||||||||||||||||||||||||||||||||||||||||||||||||
return nil, fmt.Errorf("jwk-rsa: %w", err) | ||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+26
to
35
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Check for nil recipient before encryption. Ensure that the Apply this diff to add a nil check: func EncryptRSA(pubKey *rsa.PublicKey, plaintext []byte) ([]byte, error) {
recipient, err := CreateRSARecipient(pubKey)
if err != nil {
return nil, err
}
+ if recipient == nil {
+ return nil, fmt.Errorf("jwk-rsa: recipient is nil")
+ }
ciphertext, err := ageEncrypt([]age.Recipient{recipient}, plaintext)
if err != nil {
return nil, fmt.Errorf("jwk-rsa: %w", err)
}
return ciphertext, nil
} 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codebase verification
Deprecation plan needed for KeyId field
The field is used in two main contexts:
Action items:
🔗 Analysis chain
Plan KeyId deprecation
The code uses
KeyId
field with a comment indicating future deprecation. Consider:KeyIds
KeyId
is usedLet's check for other usages of KeyId in the codebase:
Let's search for actual usages of KeyId in our codebase, excluding vendor directories and focusing on the specific struct field:
Let's check for actual usage of the KeyId field in the code to understand the impact:
Let's check for any code that might be reading or processing this field to understand the full deprecation impact:
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
Length of output: 2101
Script:
Length of output: 1140
Script:
Length of output: 950
Script:
Length of output: 3138