()
| 95 | } |
| 96 | |
| 97 | func LoadMasterKey() ([]byte, error) { |
| 98 | // Gate access behind biometry prompt |
| 99 | if err := macos.RequireBiometry("解锁指纹受保护的主密钥以使用 SSH 私钥"); err != nil { |
| 100 | return nil, err |
| 101 | } |
| 102 | res, err := queryMasterKey(serviceNew) |
| 103 | if err != nil { |
| 104 | return nil, err |
| 105 | } |
| 106 | if len(res) == 0 { |
| 107 | // try old service for backward compatibility |
| 108 | res, err = queryMasterKey(serviceOld) |
| 109 | if err != nil { |
| 110 | return nil, err |
| 111 | } |
| 112 | if len(res) == 0 { |
| 113 | return nil, fmt.Errorf("master key not initialized") |
| 114 | } |
| 115 | } |
| 116 | return res[0].Data, nil |
| 117 | } |
| 118 | |
| 119 | func queryMasterKey(svc string) ([]kc.QueryResult, error) { |
| 120 | q := kc.NewItem() |
no test coverage detected