func moveKeys(oldKeyStore, newKeyStore *trustmanager.KeyFileStore) error { // List all files but no symlinks for f := range oldKeyStore.ListKeys() { privateKey, alias, err := oldKeyStore.GetKey(f) if err != nil { return err } err = newKeyStore.AddKey(f, alias, privateKey) if err != nil { return err } } // Recreate symlinks for _, relKeyPath := range oldKeyStore.ListFiles(true) { fullKeyPath := filepath.Join(oldKeyStore.BaseDir(), relKeyPath) fi, err := os.Lstat(fullKeyPath) if err != nil { return err } if (fi.Mode() & os.ModeSymlink) != 0 { target, err := os.Readlink(fullKeyPath) if err != nil { return err } os.Symlink(target, filepath.Join(newKeyStore.BaseDir(), relKeyPath)) } } return nil }
func addKeysToArchive(zipWriter *zip.Writer, newKeyStore *trustmanager.KeyFileStore, subDir string) error { // List all files but no symlinks for _, relKeyPath := range newKeyStore.ListFiles(false) { fullKeyPath := filepath.Join(newKeyStore.BaseDir(), relKeyPath) fi, err := os.Stat(fullKeyPath) if err != nil { return err } infoHeader, err := zip.FileInfoHeader(fi) if err != nil { return err } infoHeader.Name = filepath.Join(subDir, relKeyPath) zipFileEntryWriter, err := zipWriter.CreateHeader(infoHeader) if err != nil { return err } fileContents, err := ioutil.ReadFile(fullKeyPath) if err != nil { return err } if _, err = zipFileEntryWriter.Write(fileContents); err != nil { return err } } return nil }
func addKeysToArchive(zipWriter *zip.Writer, newKeyStore *trustmanager.KeyFileStore) error { for _, relKeyPath := range newKeyStore.ListFiles() { fullKeyPath := filepath.Join(newKeyStore.BaseDir(), relKeyPath) fi, err := os.Lstat(fullKeyPath) if err != nil { return err } infoHeader, err := zip.FileInfoHeader(fi) if err != nil { return err } infoHeader.Name = relKeyPath zipFileEntryWriter, err := zipWriter.CreateHeader(infoHeader) if err != nil { return err } fileContents, err := ioutil.ReadFile(fullKeyPath) if err != nil { return err } if _, err = zipFileEntryWriter.Write(fileContents); err != nil { return err } } return nil }
func addKeysToArchive(zipWriter *zip.Writer, newKeyStore *trustmanager.KeyFileStore, tempBaseDir string) error { // List all files but no symlinks for _, fullKeyPath := range newKeyStore.ListFiles(false) { relKeyPath := strings.TrimPrefix(fullKeyPath, tempBaseDir) relKeyPath = strings.TrimPrefix(relKeyPath, string(filepath.Separator)) fi, err := os.Stat(fullKeyPath) if err != nil { return err } infoHeader, err := zip.FileInfoHeader(fi) if err != nil { return err } infoHeader.Name = relKeyPath zipFileEntryWriter, err := zipWriter.CreateHeader(infoHeader) if err != nil { return err } fileContents, err := ioutil.ReadFile(fullKeyPath) if err != nil { return err } if _, err = zipFileEntryWriter.Write(fileContents); err != nil { return err } } return nil }
func addKeysToArchive(zipWriter *zip.Writer, newKeyStore *trustmanager.KeyFileStore, subDir string) error { for _, relKeyPath := range newKeyStore.ListFiles(true) { fullKeyPath := filepath.Join(newKeyStore.BaseDir(), relKeyPath) fi, err := os.Lstat(fullKeyPath) if err != nil { return err } infoHeader, err := zip.FileInfoHeader(fi) if err != nil { return err } infoHeader.Name = filepath.Join(subDir, relKeyPath) // Is this a symlink? If so, encode properly in the zip file. if (fi.Mode() & os.ModeSymlink) != 0 { infoHeader.CreatorVersion = zipMadeByUNIX infoHeader.ExternalAttrs = zipSymlinkAttr zipFileEntryWriter, err := zipWriter.CreateHeader(infoHeader) if err != nil { return err } target, err := os.Readlink(fullKeyPath) if err != nil { return err } // Write relative path if _, err = zipFileEntryWriter.Write([]byte(target)); err != nil { return err } } else { zipFileEntryWriter, err := zipWriter.CreateHeader(infoHeader) if err != nil { return err } fileContents, err := ioutil.ReadFile(fullKeyPath) if err != nil { return err } if _, err = zipFileEntryWriter.Write(fileContents); err != nil { return err } } } return nil }
func moveKeysByGUN(oldKeyStore, newKeyStore *trustmanager.KeyFileStore, gun, outputPassphrase string) error { // List all files but no symlinks for _, f := range oldKeyStore.ListFiles(false) { fullKeyPath := strings.TrimSpace(strings.TrimSuffix(f, filepath.Ext(f))) relKeyPath := strings.TrimPrefix(fullKeyPath, oldKeyStore.BaseDir()) relKeyPath = strings.TrimPrefix(relKeyPath, string(filepath.Separator)) // Skip keys that aren't associated with this GUN if !strings.HasPrefix(relKeyPath, filepath.FromSlash(gun)) { continue } pemBytes, err := oldKeyStore.Get(relKeyPath) if err != nil { return err } block, _ := pem.Decode(pemBytes) if block == nil { return ErrNoValidPrivateKey } if x509.IsEncryptedPEMBlock(block) { return ErrNonRootKeyEncrypted } // Key is not encrypted. Parse it, and add it // to the temporary store as an encrypted key. privKey, err := trustmanager.ParsePEMPrivateKey(pemBytes, "") if err != nil { return err } err = newKeyStore.AddEncryptedKey(relKeyPath, privKey, outputPassphrase) if err != nil { return err } } return nil }
func moveKeysWithNewPassphrase(oldKeyStore, newKeyStore *trustmanager.KeyFileStore, outputPassphrase string) error { // List all files but no symlinks for _, f := range oldKeyStore.ListFiles(false) { fullKeyPath := strings.TrimSpace(strings.TrimSuffix(f, filepath.Ext(f))) relKeyPath := strings.TrimPrefix(fullKeyPath, oldKeyStore.BaseDir()) relKeyPath = strings.TrimPrefix(relKeyPath, string(filepath.Separator)) pemBytes, err := oldKeyStore.Get(relKeyPath) if err != nil { return err } block, _ := pem.Decode(pemBytes) if block == nil { return ErrNoValidPrivateKey } if !x509.IsEncryptedPEMBlock(block) { // Key is not encrypted. Parse it, and add it // to the temporary store as an encrypted key. privKey, err := trustmanager.ParsePEMPrivateKey(pemBytes, "") if err != nil { return err } err = newKeyStore.AddEncryptedKey(relKeyPath, privKey, outputPassphrase) } else { // Encrypted key - pass it through without // decrypting err = newKeyStore.Add(relKeyPath, pemBytes) } if err != nil { return err } } return nil }