
# AHE Lib库接口
提供给用户静态库文件，用于用户开发客户端应用时集成使用同态加密功能。
库的引用路径为：import "ahe/PSW/api/ahelib"
#### GenerateKey
- **接口原型**
  func GenerateKey(pwd string) (privKeyStr string, pubKeyStr string, err error)
  
- **功能描述**
  生成同态加密的密钥对。
  
- **输入说明**
  
  | 参数名 | 类型     | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | 是否必须    |
  |:---|:---|:---|:---|
  | pwd | string | 用于加密保护生成的同态私钥串，采用AES-128加密。 pwd至少满足如下要求： 1. 长度至少6个字符。  2. 必须包含如下至少两种字符的组合： - 至少一个小写字母；  - 至少一个大写字母；  - 至少一个数字；  - 至少一个特殊字符：\`\~!@#$%\^\&\*()-_=+\\\|\[{}\];:'",\<.\>/? 和空格     | 是（不能为空） |
     
  
- **输出说明**
  
  | 参数名        | 类型     | 描述              |
  |:---|:---|:---|
  | privKeyStr | string | 使用pwd加密的同态加密私钥。 |
  | pubKeyStr  | string | 同态加密公钥串         |
  | err        | error  | 错误              |
     
  
- 注意事项 保护密钥的复杂度取决于用户实际的应用场景，作为底层库的调用，不去严格限制。
  
 
#### Encypt
- **接口原型**
  func Encypt (secretNumStr string, pubKeyStr string) (ciphertext string, err error)
  
- **功能描述**
  同态加密。
  
- **输入说明**
  
  | 参数名          | 类型     | 描述                                     | 是否必须 |
  |:---|:---|:---|:---|
  | secretNumStr | string | 需要加密的数值，只支持大于等于0的正整数，如果数字有小数，需要扩大倍数传入。 | 是    |
  | pubKeyStr    | String | 同态加密的公钥                                | 是    |
     
  
- **输出说明**
  
  | 参数名        | 类型     | 描述     |
  |:---|:---|:---|
  | ciphertext | string | 加密后的数据 |
  | err        | error  | 返回错误   |
     
  
- **注意事项**
  无。
  
 
#### Decrypt
- **接口原型**
  func Decrypt(ciphertext string, privKeyStr string, pwd string) (plainText \*big.Int, err error)
  
- **功能描述**
  同态解密。
  
- **输入说明**
  
  | 参数名        | 类型     | 描述                | 是否必须 |
  |:---|:---|:---|:---|
  | ciphertext | string | 需要解密的密文           | 是    |
  | privKeyStr | string | 同态加密的私钥串（被pwd加密保护 | 是    |
  | pwd        | string | 用于保护私钥的字符串        | 否    |
     
  
- **输出说明**
  
  | 参数名       | 类型        | 描述     |
  |:---|:---|:---|
  | plainText | \*big.int | 解密后的数据 |
  | err       | error     | 返回错误   |
     
  
- **注意事项**
  无。
  
 
#### Add
- **接口原型**
  func Add(cipher1, cipher2 string) (cipher string, err error)
  
- **功能描述**
  同态加法。
  
- **输入说明**
  
  | 参数名     | 类型     | 描述      | 是否必须 |
  |:---|:---|:---|:---|
  | cipher1 | string | 被加密的密文1 | 是    |
  | cipher2 | string | 被加密的密文2 | 是    |
     
  
- **输出说明**
  
  | 参数名    | 类型     | 描述     |
  |:---|:---|:---|
  | cipher | string | 相加后的数据 |
  | err    | error  | 返回错误   |
     
  
- **注意事项**
  无。
  
 
#### InitBalance
- **接口原型**
  func InitBalance(balanceStr string, pubKey string) (string, error)
  
- **功能描述**
  初始化余额。
  
- **输入说明**
  
  | 参数名        | 类型     | 描述                                 | 是否必须 |
  |:---|:---|:---|:---|
  | pubKey     | string | 公钥串                                | 是    |
  | balanceStr | string | 初始余额，只支持大于等于0的正整数，如果数字有小数，需要扩大倍数传入 | 是    |
     
  
- **输出说明**
  
  | 参数名         | 类型     | 描述     |
  |:---|:---|:---|
  | balanceInfo | string | 交易金额信息 |
  | err         | error  | 返回错误   |
     
  
- **注意事项**
  无。
  
 
#### PrepareTxInfo
- **接口原型**
  func PrepareTxInfo(cipherBalanceA string, transNumStr string, pubKeyA, pubKeyB string, privKeyA string,pwd string) (string, error)
  
- **功能描述**
  交易准备。
  
- **输入说明**
  
  | 参数名            | 类型     | 描述                   | 是否必须 |
  |:---|:---|:---|:---|
  | cipherBalanceA | string | A的当前余额（密文），取链上当前A的余额 | 是    |
  | transNumStr    | string | 转账金额（明文）             | 是    |
  | pubKeyA        | string | A的公钥串                | 是    |
  | pubKeyB        | string | B的公钥串                | 是    |
  | PrivKeyA       | string | A的私钥串                | 是    |
  | pwd            | string | 用于加密保护的字符串           | 否    |
     
  
- **输出说明**
  
  | 参数名    | 类型     | 描述     |
  |:---|:---|:---|
  | Txinfo | string | 交易准备数据 |
  | err    | error  | 返回错误   |
     
  
- **注意事项**
  无。
  
 
