func stringify(a []uint64) string { x := bytes.NewBuffer(make([]byte, 0, 10)) for i := range a { x.WriteString(strconv.Uitob64(a[i], 10)) x.WriteString(",") } return x.String() }
// nonce returns a unique string. func nonce() string { nonceLock.Lock() defer nonceLock.Unlock() if nonceCounter == 0 { binary.Read(rand.Reader, binary.BigEndian, &nonceCounter) } result := strconv.Uitob64(nonceCounter, 16) nonceCounter += 1 return result }
func flagName(i uint32, names []intName, goSyntax bool) string { s := "" for _, n := range names { if n.i&i == n.i { if len(s) > 0 { s += "+" } if goSyntax { s += "macho." } s += n.s i -= n.i } } if len(s) == 0 { return "0x" + strconv.Uitob64(uint64(i), 16) } if i != 0 { s += "+0x" + strconv.Uitob64(uint64(i), 16) } return s }
func (t *Server) Read(args *sfs.ReadArgs, ret *sfs.ReadReturn) os.Error { fileName := strconv.Uitob64(args.ChunkID, 10) file, err := os.Open(fileName, os.O_RDONLY, 0666) if err != nil { log.Fatal("os.Open error: ", err) } _, err = file.Read(ret.Data.Data[:]) if err != nil { log.Fatal("file.Read error: ", err) } file.Close() return nil }
func (t *Server) Write(args *sfs.WriteArgs, ret *sfs.WriteReturn) os.Error { // this assumes that master tells client what chunk number it is allowed to write to // but this could be an incorrect assumption // if opening chunk doesn't work, assume it doesn't exist and create one fileName := strconv.Uitob64(args.ChunkID, 10) file, err := os.Open(fileName, os.O_CREAT|os.O_WRONLY, 0666) if err != nil { file = os.NewFile(currentFD, fileName) currentFD++ } _, err = file.Write(args.Data.Data[:]) if err != nil { log.Fatal("file.Write error: ", err) } file.Close() return nil }
func (c Breakpoint) String() string { return "breakpoint at 0x" + strconv.Uitob64(uint64(c.PC()), 16) }
// Encrypt encrypts a message to a number of recipients and, optionally, signs // it. hints contains optional information, that is also encrypted, that aids // the recipients in processing the message. The resulting WriteCloser must // be closed after the contents of the file have been written. func Encrypt(ciphertext io.Writer, to []*Entity, signed *Entity, hints *FileHints) (plaintext io.WriteCloser, err error) { var signer *packet.PrivateKey if signed != nil { signer = signed.signingKey().PrivateKey if signer == nil || signer.Encrypted { return nil, error_.InvalidArgumentError("signing key must be decrypted") } } // These are the possible ciphers that we'll use for the message. candidateCiphers := []uint8{ uint8(packet.CipherAES128), uint8(packet.CipherAES256), uint8(packet.CipherCAST5), } // These are the possible hash functions that we'll use for the signature. candidateHashes := []uint8{ hashToHashId(crypto.SHA256), hashToHashId(crypto.SHA512), hashToHashId(crypto.SHA1), hashToHashId(crypto.RIPEMD160), } // In the event that a recipient doesn't specify any supported ciphers // or hash functions, these are the ones that we assume that every // implementation supports. defaultCiphers := candidateCiphers[len(candidateCiphers)-1:] defaultHashes := candidateHashes[len(candidateHashes)-1:] encryptKeys := make([]Key, len(to)) for i := range to { encryptKeys[i] = to[i].encryptionKey() if encryptKeys[i].PublicKey == nil { return nil, error_.InvalidArgumentError("cannot encrypt a message to key id " + strconv.Uitob64(to[i].PrimaryKey.KeyId, 16) + " because it has no encryption keys") } sig := to[i].primaryIdentity().SelfSignature preferredSymmetric := sig.PreferredSymmetric if len(preferredSymmetric) == 0 { preferredSymmetric = defaultCiphers } preferredHashes := sig.PreferredHash if len(preferredHashes) == 0 { preferredHashes = defaultHashes } candidateCiphers = intersectPreferences(candidateCiphers, preferredSymmetric) candidateHashes = intersectPreferences(candidateHashes, preferredHashes) } if len(candidateCiphers) == 0 || len(candidateHashes) == 0 { return nil, error_.InvalidArgumentError("cannot encrypt because recipient set shares no common algorithms") } cipher := packet.CipherFunction(candidateCiphers[0]) hash, _ := s2k.HashIdToHash(candidateHashes[0]) symKey := make([]byte, cipher.KeySize()) if _, err := io.ReadFull(rand.Reader, symKey); err != nil { return nil, err } for _, key := range encryptKeys { if err := packet.SerializeEncryptedKey(ciphertext, rand.Reader, key.PublicKey, cipher, symKey); err != nil { return nil, err } } encryptedData, err := packet.SerializeSymmetricallyEncrypted(ciphertext, cipher, symKey) if err != nil { return } if signer != nil { ops := &packet.OnePassSignature{ SigType: packet.SigTypeBinary, Hash: hash, PubKeyAlgo: signer.PubKeyAlgo, KeyId: signer.KeyId, IsLast: true, } if err := ops.Serialize(encryptedData); err != nil { return nil, err } } if hints == nil { hints = &FileHints{} } w := encryptedData if signer != nil { // If we need to write a signature packet after the literal // data then we need to stop literalData from closing // encryptedData. w = noOpCloser{encryptedData} } literalData, err := packet.SerializeLiteral(w, hints.IsBinary, hints.FileName, hints.EpochSeconds) if err != nil { return nil, err } if signer != nil { return signatureWriter{encryptedData, literalData, hash, hash.New(), signer}, nil } return literalData, nil }