Documentation ¶
Overview ¶
Package common contains Assuan protocol I/O and error handling utilities shared by server and client code.
Index ¶
- Constants
- func DecodeErrCmd(params string) error
- func EscapeParameters(raw string) string
- func MakeErrCode(source ErrorSource, code ErrorCode) int
- func SplitErrCode(code int) (ErrorSource, ErrorCode)
- func UnescapeParameters(encoded string) (string, error)
- type Error
- type ErrorCode
- type ErrorSource
- type Pipe
- func (p *Pipe) Close() error
- func (p *Pipe) ReadData() (data []byte, err error)
- func (p *Pipe) ReadLine() (cmd string, params string, err error)
- func (p *Pipe) RestrictInputLen(restrict bool)
- func (p *Pipe) WriteComment(text string) error
- func (p *Pipe) WriteData(input []byte) error
- func (p *Pipe) WriteDataReader(input io.Reader) error
- func (p *Pipe) WriteError(err Error) error
- func (p *Pipe) WriteLine(cmd string, params string) error
- type ReadWriter
Constants ¶
const ( // MaxLineLen is a maximum length of line in Assuan protocol, including // space after command and LF. MaxLineLen = 1000 )
Variables ¶
This section is empty.
Functions ¶
func DecodeErrCmd ¶
DecodeErrCmd converts protocol string into error.
func EscapeParameters ¶
EscapeParameters percent-encodes CR, LF, % and backslash at end as required by protocol. Note: We escape all backslashes to keep code simple. Ref.: https//www.gnupg.org/documentation/manuals/assuan/Client-requests.html.
func MakeErrCode ¶
func MakeErrCode(source ErrorSource, code ErrorCode) int
MakeErrCode converts (source, code) pair to format used by Assuan.
func SplitErrCode ¶
func SplitErrCode(code int) (ErrorSource, ErrorCode)
SplitErrCode splits integer code into parts according to protocol.
func UnescapeParameters ¶
UnescapeParameters reverses EscapeParameters function. Note: It does unescape any escaped character, not only CR, LF, % and backslashes. Ref.: https//www.gnupg.org/documentation/manuals/assuan/Client-requests.html.
Types ¶
type Error ¶
type Error struct { Src ErrorSource Code ErrorCode SrcName string Message string }
Error is used to present errors returned by server.
func ReadError ¶
ReadError converts arbitrary error object to protocol error with Assuan Read Error code.
func WriteError ¶
WriteError converts arbitrary error object to protocol error with Assuan Write Error code.
type ErrorCode ¶
type ErrorCode uint16
ErrorCode - error code as defined by Assuan protocol.
const ( ErrNoError ErrorCode = 0 ErrGeneral ErrorCode = 1 ErrUnknownPacket ErrorCode = 2 ErrUnknownVersion ErrorCode = 3 ErrPubkeyAlgo ErrorCode = 4 ErrDigestAlgo ErrorCode = 5 ErrBadPubkey ErrorCode = 6 ErrBadSeckey ErrorCode = 7 ErrBadSignature ErrorCode = 8 ErrNoPubkey ErrorCode = 9 ErrChecksum ErrorCode = 10 ErrBadPassphrase ErrorCode = 11 ErrCipherAlgo ErrorCode = 12 ErrKeyringOpen ErrorCode = 13 ErrInvPacket ErrorCode = 14 ErrInvArmor ErrorCode = 15 ErrNoUserID ErrorCode = 16 ErrNoSeckey ErrorCode = 17 ErrWrongSeckey ErrorCode = 18 ErrBadKey ErrorCode = 19 ErrComprAlgo ErrorCode = 20 ErrNoPrime ErrorCode = 21 ErrNoEncodingMethod ErrorCode = 22 ErrNoEncryptionScheme ErrorCode = 23 ErrNoSignatureScheme ErrorCode = 24 ErrInvAttr ErrorCode = 25 ErrNoValue ErrorCode = 26 ErrNotFound ErrorCode = 27 ErrValueNotFound ErrorCode = 28 ErrSyntax ErrorCode = 29 ErrBadMpi ErrorCode = 30 ErrInvPassphrase ErrorCode = 31 ErrSigClass ErrorCode = 32 ErrResourceLimit ErrorCode = 33 ErrInvKeyring ErrorCode = 34 ErrTrustdb ErrorCode = 35 ErrBadCert ErrorCode = 36 ErrInvUserID ErrorCode = 37 ErrUnexpected ErrorCode = 38 ErrTimeConflict ErrorCode = 39 ErrKeyserver ErrorCode = 40 ErrWrongPubkeyAlgo ErrorCode = 41 ErrTributeToDA ErrorCode = 42 ErrWeakKey ErrorCode = 43 ErrInvKeylen ErrorCode = 44 ErrInvArg ErrorCode = 45 ErrBadURI ErrorCode = 46 ErrInvURI ErrorCode = 47 ErrNetwork ErrorCode = 48 ErrUnknownHost ErrorCode = 49 ErrSelftestFailed ErrorCode = 50 ErrNotEncrypted ErrorCode = 51 ErrNotProcessed ErrorCode = 52 ErrUnusablePubkey ErrorCode = 53 ErrUnusableSeckey ErrorCode = 54 ErrInvValue ErrorCode = 55 ErrBadCertChain ErrorCode = 56 ErrMissingCert ErrorCode = 57 ErrNoData ErrorCode = 58 ErrBug ErrorCode = 59 ErrNotSupported ErrorCode = 60 ErrInvOp ErrorCode = 61 ErrTimeout ErrorCode = 62 ErrInternal ErrorCode = 63 ErrEOFGcrypt ErrorCode = 64 ErrInvObj ErrorCode = 65 ErrTooShort ErrorCode = 66 ErrTooLarge ErrorCode = 67 ErrNoObj ErrorCode = 68 ErrNotImplemented ErrorCode = 69 ErrConflict ErrorCode = 70 ErrInvCipherMode ErrorCode = 71 ErrInvFlag ErrorCode = 72 ErrInvHandle ErrorCode = 73 ErrTruncated ErrorCode = 74 ErrIncompleteLine ErrorCode = 75 ErrInvResponse ErrorCode = 76 ErrNoAgent ErrorCode = 77 ErrAgent ErrorCode = 78 ErrInvData ErrorCode = 79 ErrAssuanServerFault ErrorCode = 80 ErrAssuan ErrorCode = 81 ErrInvSessionKey ErrorCode = 82 ErrInvSexp ErrorCode = 83 ErrUnsupportedAlgorithm ErrorCode = 84 ErrNoPinEntry ErrorCode = 85 ErrPinEntry ErrorCode = 86 ErrBadPIN ErrorCode = 87 ErrInvName ErrorCode = 88 ErrBadData ErrorCode = 89 ErrInvParameter ErrorCode = 90 ErrWrongCard ErrorCode = 91 ErrNoDirmngr ErrorCode = 92 ErrDirmngr ErrorCode = 93 ErrCertRevoked ErrorCode = 94 ErrNoCrlKnown ErrorCode = 95 ErrCrlTooOld ErrorCode = 96 ErrLineTooLong ErrorCode = 97 ErrNotTrusted ErrorCode = 98 ErrCanceled ErrorCode = 99 ErrBadCaCert ErrorCode = 100 ErrCertExpired ErrorCode = 101 ErrCertTooYoung ErrorCode = 102 ErrUnsupportedCert ErrorCode = 103 ErrUnknownSexp ErrorCode = 104 ErrUnsupportedProtection ErrorCode = 105 ErrCorruptedProtection ErrorCode = 106 ErrAmbiguousName ErrorCode = 107 ErrCard ErrorCode = 108 ErrCardReset ErrorCode = 109 ErrCardRemoved ErrorCode = 110 ErrInvCard ErrorCode = 111 ErrCardNotPresent ErrorCode = 112 ErrNoPkcs15App ErrorCode = 113 ErrNotConfirmed ErrorCode = 114 ErrConfiguration ErrorCode = 115 ErrNoPolicyMatch ErrorCode = 116 ErrInvIndex ErrorCode = 117 ErrInvID ErrorCode = 118 ErrNoScdaemon ErrorCode = 119 ErrScdaemon ErrorCode = 120 ErrUnsupportedProtocol ErrorCode = 121 ErrBadPinMethod ErrorCode = 122 ErrCardNotInitialized ErrorCode = 123 ErrUnsupportedOperation ErrorCode = 124 ErrWrongKeyUsage ErrorCode = 125 ErrNothingFound ErrorCode = 126 ErrWrongBlobType ErrorCode = 127 ErrMissingValue ErrorCode = 128 ErrHardware ErrorCode = 129 ErrPinBlocked ErrorCode = 130 ErrUseConditions ErrorCode = 131 ErrPinNotSynced ErrorCode = 132 ErrInvCrl ErrorCode = 133 ErrBadBer ErrorCode = 134 ErrInvBer ErrorCode = 135 ErrElementNotFound ErrorCode = 136 ErrIdentifierNotFound ErrorCode = 137 ErrInvTag ErrorCode = 138 ErrInvLength ErrorCode = 139 ErrInvKeyinfo ErrorCode = 140 ErrUnexpectedTag ErrorCode = 141 ErrNotDerEncoded ErrorCode = 142 ErrNoCmsObj ErrorCode = 143 ErrInvCmsObj ErrorCode = 144 ErrUnknownCmsObj ErrorCode = 145 ErrUnsupportedCmsObj ErrorCode = 146 ErrUnsupportedEncoding ErrorCode = 147 ErrUnsupportedCmsVersion ErrorCode = 148 ErrUnknownAlgorithm ErrorCode = 149 ErrInvEngine ErrorCode = 150 ErrPubkeyNotTrusted ErrorCode = 151 ErrDecryptFailed ErrorCode = 152 ErrKeyExpired ErrorCode = 153 ErrSigExpired ErrorCode = 154 ErrEncodingProblem ErrorCode = 155 ErrInvState ErrorCode = 156 ErrDupValue ErrorCode = 157 ErrMissingAction ErrorCode = 158 ErrModuleNotFound ErrorCode = 159 ErrInvOidString ErrorCode = 160 ErrInvTime ErrorCode = 161 ErrInvCrlObj ErrorCode = 162 ErrUnsupportedCrlVersion ErrorCode = 163 ErrInvCertObj ErrorCode = 164 ErrUnknownName ErrorCode = 165 ErrLocaleProblem ErrorCode = 166 ErrNotLocked ErrorCode = 167 ErrProtocolViolation ErrorCode = 168 ErrInvMac ErrorCode = 169 ErrInvRequest ErrorCode = 170 ErrUnknownExtn ErrorCode = 171 ErrUnknownCritExtn ErrorCode = 172 ErrLocked ErrorCode = 173 ErrUnknownOption ErrorCode = 174 ErrUnknownCommand ErrorCode = 175 ErrNotOperational ErrorCode = 176 ErrNoPassphrase ErrorCode = 177 ErrNoPin ErrorCode = 178 ErrNotEnabled ErrorCode = 179 ErrNoEngine ErrorCode = 180 ErrMissingKey ErrorCode = 181 ErrTooMany ErrorCode = 182 ErrLimitReached ErrorCode = 183 ErrNotInitialized ErrorCode = 184 ErrMissingIssuerCert ErrorCode = 185 ErrNoKeyserver ErrorCode = 186 ErrInvCurve ErrorCode = 187 ErrUnknownCurve ErrorCode = 188 ErrDupKey ErrorCode = 189 ErrAmbiguous ErrorCode = 190 ErrNoCryptCtx ErrorCode = 191 ErrWrongCryptCtx ErrorCode = 192 ErrBadCryptCtx ErrorCode = 193 ErrCryptCtxConflict ErrorCode = 194 ErrBrokenPubkey ErrorCode = 195 ErrBrokenSeckey ErrorCode = 196 ErrMacAlgo ErrorCode = 197 ErrFullyCanceled ErrorCode = 198 ErrUnfinished ErrorCode = 199 ErrBufferTooShort ErrorCode = 200 ErrSEXPInvLenSpec ErrorCode = 201 ErrSEXPStringTooLong ErrorCode = 202 ErrSEXPUnmatchedParen ErrorCode = 203 ErrSEXPNotCanonical ErrorCode = 204 ErrSEXPBadCharacter ErrorCode = 205 ErrSEXPBadQuotation ErrorCode = 206 ErrSEXPZeroPrefix ErrorCode = 207 ErrSEXPNestedDh ErrorCode = 208 ErrSEXPUnmatchedDh ErrorCode = 209 ErrSEXPUnexpectedPunc ErrorCode = 210 ErrSEXPBadHexChar ErrorCode = 211 ErrSEXPOddHexNumbers ErrorCode = 212 ErrSEXPBadOctChar ErrorCode = 213 ErrSubkeysExpOrRev ErrorCode = 217 ErrDBCorrupted ErrorCode = 218 ErrServerFailed ErrorCode = 219 ErrNoName ErrorCode = 220 ErrNoKey ErrorCode = 221 ErrLegacyKey ErrorCode = 222 ErrRequestTooShort ErrorCode = 223 ErrRequestTooLong ErrorCode = 224 ErrObjTermState ErrorCode = 225 ErrNoCertChain ErrorCode = 226 ErrCertTooLarge ErrorCode = 227 ErrInvRecord ErrorCode = 228 ErrBadMAC ErrorCode = 229 ErrUnexpectedMsg ErrorCode = 230 ErrComprFailed ErrorCode = 231 ErrWouldWrap ErrorCode = 232 ErrFatalAlert ErrorCode = 233 ErrNoCipher ErrorCode = 234 ErrMissingClientCert ErrorCode = 235 ErrCloseNotify ErrorCode = 236 ErrTicketExpired ErrorCode = 237 ErrBadTicket ErrorCode = 238 ErrUnknownIdentity ErrorCode = 239 ErrBadHSCert ErrorCode = 240 ErrBadHSCertReq ErrorCode = 241 ErrBadHSCertVer ErrorCode = 242 ErrBadHSChangeCipher ErrorCode = 243 ErrBadHSClientHello ErrorCode = 244 ErrBadHSServerHello ErrorCode = 245 ErrBadHSServerHelloDone ErrorCode = 246 ErrBadHSFinished ErrorCode = 247 ErrBadHSServerKex ErrorCode = 248 ErrBadHSClientKex ErrorCode = 249 ErrBogusString ErrorCode = 250 ErrForbidden ErrorCode = 251 ErrKeyDisabled ErrorCode = 252 ErrKeyOnCard ErrorCode = 253 ErrInvLockObj ErrorCode = 254 ErrTrue ErrorCode = 255 ErrFalse ErrorCode = 256 ErrAssGeneral ErrorCode = 257 ErrAssAcceptFailed ErrorCode = 258 ErrAssConnectFailed ErrorCode = 259 ErrAssInvResponse ErrorCode = 260 ErrAssInvValue ErrorCode = 261 ErrAssIncompleteLine ErrorCode = 262 ErrAssLineTooLong ErrorCode = 263 ErrAssNestedCommands ErrorCode = 264 ErrAssNoDataCb ErrorCode = 265 ErrAssNoInquireCb ErrorCode = 266 ErrAssNotAServer ErrorCode = 267 ErrAssNotAClient ErrorCode = 268 ErrAssServerStart ErrorCode = 269 ErrAssReadError ErrorCode = 270 ErrAssWriteError ErrorCode = 271 ErrAssTooMuchData ErrorCode = 273 ErrAssUnexpectedCmd ErrorCode = 274 ErrAssUnknownCmd ErrorCode = 275 ErrAssSyntax ErrorCode = 276 ErrAssCanceled ErrorCode = 277 ErrAssNoInput ErrorCode = 278 ErrAssNoOutput ErrorCode = 279 ErrAssParameter ErrorCode = 280 ErrAssUnknownInquire ErrorCode = 281 ErrEngineTooOld ErrorCode = 300 ErrWindowTooSmall ErrorCode = 301 ErrWindowTooLarge ErrorCode = 302 ErrMissingEnvvar ErrorCode = 303 ErrUserIDExists ErrorCode = 304 ErrNameExists ErrorCode = 305 ErrDupName ErrorCode = 306 ErrTooYoung ErrorCode = 307 ErrTooOld ErrorCode = 308 ErrUnknownFlag ErrorCode = 309 ErrInvOrder ErrorCode = 310 ErrAlreadyFetched ErrorCode = 311 ErrTryLater ErrorCode = 312 ErrWrongName ErrorCode = 313 ErrSystemBug ErrorCode = 666 ErrDNSUnknown ErrorCode = 711 ErrDNSSection ErrorCode = 712 ErrDNSAddress ErrorCode = 713 ErrDNSNoQuery ErrorCode = 714 ErrDNSNoAnswer ErrorCode = 715 ErrDNSClosed ErrorCode = 716 ErrDNSVerify ErrorCode = 717 ErrDNSTimeout ErrorCode = 718 ErrLDAPGeneral ErrorCode = 721 ErrLDAPAttrGeneral ErrorCode = 722 ErrLDAPNameGeneral ErrorCode = 723 ErrLDAPSecurityGeneral ErrorCode = 724 ErrLDAPServiceGeneral ErrorCode = 725 ErrLDAPUpdateGeneral ErrorCode = 726 ErrLDAPEGeneral ErrorCode = 727 ErrLDAPXGeneral ErrorCode = 728 ErrLDAPOtherGeneral ErrorCode = 729 ErrLDAPXConnecting ErrorCode = 750 ErrLDAPReferralLimit ErrorCode = 751 ErrLDAPClientLoop ErrorCode = 752 ErrLDAPNoResults ErrorCode = 754 ErrLDAPControlNotFound ErrorCode = 755 ErrLDAPNotSupported ErrorCode = 756 ErrLDAPConnect ErrorCode = 757 ErrLDAPNoMemory ErrorCode = 758 ErrLDAPParam ErrorCode = 759 ErrLDAPUserCancelled ErrorCode = 760 ErrLDAPFilter ErrorCode = 761 ErrLDAPAuthUnknown ErrorCode = 762 ErrLDAPTimeout ErrorCode = 763 ErrLDAPDecoding ErrorCode = 764 ErrLDAPEncoding ErrorCode = 765 ErrLDAPLocal ErrorCode = 766 ErrLDAPServerDown ErrorCode = 767 ErrLDAPSuccess ErrorCode = 768 ErrLDAPOperations ErrorCode = 769 ErrLDAPProtocol ErrorCode = 770 ErrLDAPTimelimit ErrorCode = 771 ErrLDAPSizelimit ErrorCode = 772 ErrLDAPCompareFalse ErrorCode = 773 ErrLDAPCompareTrue ErrorCode = 774 ErrLDAPUnsupportedAuth ErrorCode = 775 ErrLDAPStrongAuthRqrd ErrorCode = 776 ErrLDAPPartialResults ErrorCode = 777 ErrLDAPReferral ErrorCode = 778 ErrLDAPAdminlimit ErrorCode = 779 ErrLDAPConfidentRqrd ErrorCode = 781 ErrLDAPSaslBindInprog ErrorCode = 782 ErrLDAPNoSuchAttribute ErrorCode = 784 ErrLDAPUndefinedType ErrorCode = 785 ErrLDAPBadMatching ErrorCode = 786 ErrLDAPConstViolation ErrorCode = 787 ErrLDAPTypeValueExists ErrorCode = 788 ErrLDAPInvSyntax ErrorCode = 789 ErrLDAPNoSuchObj ErrorCode = 800 ErrLDAPAliasProblem ErrorCode = 801 ErrLDAPInvDnSyntax ErrorCode = 802 ErrLDAPIsLeaf ErrorCode = 803 ErrLDAPAliasDeref ErrorCode = 804 ErrLDAPXProxyAuthFail ErrorCode = 815 ErrLDAPBadAuth ErrorCode = 816 ErrLDAPInvCredentials ErrorCode = 817 ErrLDAPInsufficientAcc ErrorCode = 818 ErrLDAPBusy ErrorCode = 819 ErrLDAPUnwillToPerform ErrorCode = 821 ErrLDAPLoopDetect ErrorCode = 822 ErrLDAPNamingViolation ErrorCode = 832 ErrLDAPObjClsViolation ErrorCode = 833 ErrLDAPNotAllowNonleaf ErrorCode = 834 ErrLDAPNotAllowOnRdn ErrorCode = 835 ErrLDAPAlreadyExists ErrorCode = 836 ErrLDAPNoObjClassMods ErrorCode = 837 ErrLDAPResultsTooLarge ErrorCode = 838 ErrLDAPAffectsMultDsas ErrorCode = 839 ErrLDAPVlv ErrorCode = 844 ErrLDAPOther ErrorCode = 848 ErrLDAPCupResourceLimit ErrorCode = 881 ErrLDAPCupSecViolation ErrorCode = 882 ErrLDAPCupInvData ErrorCode = 883 ErrLDAPCupUnsupScheme ErrorCode = 884 ErrLDAPCupReload ErrorCode = 885 ErrLDAPCancelled ErrorCode = 886 ErrLDAPNoSuchOperation ErrorCode = 887 ErrLDAPTooLate ErrorCode = 888 ErrLDAPCannotCancel ErrorCode = 889 ErrLDAPAssertionFailed ErrorCode = 890 ErrLDAPProxAuthDenied ErrorCode = 891 ErrUser1 ErrorCode = 1024 ErrUser2 ErrorCode = 1025 ErrUser3 ErrorCode = 1026 ErrUser4 ErrorCode = 1027 ErrUser5 ErrorCode = 1028 ErrUser6 ErrorCode = 1029 ErrUser7 ErrorCode = 1030 ErrUser8 ErrorCode = 1031 ErrUser9 ErrorCode = 1032 ErrUser10 ErrorCode = 1033 ErrUser11 ErrorCode = 1034 ErrUser12 ErrorCode = 1035 ErrUser13 ErrorCode = 1036 ErrUser14 ErrorCode = 1037 ErrUser15 ErrorCode = 1038 ErrUser16 ErrorCode = 1039 ErrMissingErrno ErrorCode = 16381 ErrUnknownErrno ErrorCode = 16382 ErrEOF ErrorCode = 16383 )
Remaining GPG_ERR_* constants from gpg-error.h (error codes).
type ErrorSource ¶
type ErrorSource uint8
ErrorSource - error source as defined by Assuan protocol.
const ( ErrSrcUnknown ErrorSource = 0 ErrSrcGcrypt ErrorSource = 1 ErrSrcGPG ErrorSource = 2 ErrSrcGPGSM ErrorSource = 3 ErrSrcGPGagent ErrorSource = 4 ErrSrcPinentry ErrorSource = 5 ErrSrcSCD ErrorSource = 6 ErrSrcGPGME ErrorSource = 7 ErrSrcKeybox ErrorSource = 8 ErrSrcKSBA ErrorSource = 9 ErrSrcDirmngr ErrorSource = 10 ErrSrcGSTA ErrorSource = 11 ErrSrcGPA ErrorSource = 21 ErrSrcKleo ErrorSource = 13 ErrSrcG13 ErrorSource = 14 ErrSrcAssuan ErrorSource = 15 ErrSrcTLS ErrorSource = 17 ErrSrcAny ErrorSource = 31 ErrSrcUser1 ErrorSource = 32 ErrSrcUser2 ErrorSource = 33 ErrSrcUser3 ErrorSource = 34 ErrSrcUser4 ErrorSource = 35 )
GPG_ERR_SOURCE_* constants from gpg-error.h.
type Pipe ¶
type Pipe struct {
// contains filtered or unexported fields
}
Pipe is a wrapper for Assuan command stream.
func New ¶
func New(stream io.ReadWriter) Pipe
New crreates and initializes Pipe using biderectional stream.
func (*Pipe) ReadLine ¶
ReadLine reads raw request/response in following format: command <parameters>
Empty lines and lines starting with # are ignored as specified by protocol. Additionally, status information is silently discarded for now.
func (*Pipe) RestrictInputLen ¶
RestrictInputLen controls how lines longer than MaxLineLen should be handled. By default they will be discarded and error will be returned. You can disable this behavior using RestrictInputLen(false) if implementation you are working with violates this restriction.
Note that even with b=false line length will be restricted to bufio.MaxScanTokenSize (64 KiB).
This function MUST be called before any I/O, otherwise it will panic.
func (*Pipe) WriteComment ¶
WriteComment is special case of WriteLine. "Command" is # and text is parameter.
func (*Pipe) WriteData ¶
WriteData sends passed byte slice using one or more D commands. Note: Error may occur even after some data is written so it's better to just CAN transaction after WriteData error.
func (*Pipe) WriteDataReader ¶
WriteDataReader is similar to WriteData but sends data from input Reader until EOF.
func (*Pipe) WriteError ¶
WriteError is a special case of WriteLine. It writes command.