Skip to content
This repository was archived by the owner on Feb 5, 2026. It is now read-only.
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions drive.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package proton_api_bridge

import (
"context"
"fmt"
"log"

"github.com/henrybear327/Proton-API-Bridge/common"
Expand All @@ -24,6 +25,7 @@ type ProtonDrive struct {
m *proton.Manager
userKR *crypto.KeyRing
addrKRs map[string]*crypto.KeyRing
emailKRs map[string]*crypto.KeyRing
addrData map[string]proton.Address
signatureAddress string

Expand Down Expand Up @@ -143,6 +145,7 @@ func NewProtonDrive(ctx context.Context, config *common.Config, authHandler prot
m: m,
userKR: userKR,
addrKRs: addrKRs,
emailKRs: make(map[string]*crypto.KeyRing),
addrData: addrData,
signatureAddress: mainShare.Creator,

Expand Down Expand Up @@ -194,6 +197,11 @@ func (protonDrive *ProtonDrive) getSignatureVerificationKeyring(emailAddresses [
return nil, err
}
}
if emailKR, ok := protonDrive.emailKRs[emailAddress]; ok {
if err := addKeysFromKR(ret, emailKR); err != nil {
return nil, err
}
}
}

if err := addKeysFromKR(ret, verificationAddrKRs...); err != nil {
Expand All @@ -205,3 +213,23 @@ func (protonDrive *ProtonDrive) getSignatureVerificationKeyring(emailAddresses [
}
return ret, nil
}

func (protonDrive *ProtonDrive) GetKeyRingForAddressID(addrID string) (*crypto.KeyRing, bool) {
kr, found := protonDrive.addrKRs[addrID]
return kr, found
}

func (protonDrive *ProtonDrive) AddKeyRingForEmail(ctx context.Context, emailAddress string) (*crypto.KeyRing, error) {
pk, _, err := protonDrive.c.GetPublicKeys(ctx, emailAddress)
if err != nil {
return nil, fmt.Errorf("failed to get public keys for address %q: %w", emailAddress, err)
}
pkKR, err := pk.GetKeyRing()
if err != nil {
return nil, fmt.Errorf("failed to get keyring for address %q: %w", emailAddress, err)
}

protonDrive.emailKRs[emailAddress] = pkKR

return pkKR, nil
}