comparison app/src/main/java/com/five_ten_sg/connectbot/bean/PubkeyBean.java @ 438:d29cce60f393

migrate from Eclipse to Android Studio
author Carl Byington <carl@five-ten-sg.com>
date Thu, 03 Dec 2015 11:23:55 -0800
parents src/com/five_ten_sg/connectbot/bean/PubkeyBean.java@82d127ae1550
children
comparison
equal deleted inserted replaced
437:208b31032318 438:d29cce60f393
1 /*
2 * ConnectBot: simple, powerful, open-source SSH client for Android
3 * Copyright 2007 Kenny Root, Jeffrey Sharkey
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 package com.five_ten_sg.connectbot.bean;
19
20 import java.security.NoSuchAlgorithmException;
21 import java.security.PrivateKey;
22 import java.security.PublicKey;
23 import java.security.interfaces.ECPublicKey;
24 import java.security.interfaces.RSAPublicKey;
25 import java.security.spec.InvalidKeySpecException;
26
27 import com.five_ten_sg.connectbot.util.PubkeyDatabase;
28 import com.five_ten_sg.connectbot.util.PubkeyUtils;
29 import android.content.ContentValues;
30
31 /**
32 * @author Kenny Root
33 *
34 */
35 public class PubkeyBean extends AbstractBean {
36 public static final String BEAN_NAME = "pubkey";
37
38 /* Database fields */
39 private long id;
40 private String nickname;
41 private String type;
42 private byte[] privateKey;
43 private byte[] publicKey;
44 private boolean encrypted = false;
45 private boolean startup = false;
46 private boolean confirmUse = false;
47 private int lifetime = 0;
48
49 /* Transient values */
50 private transient boolean unlocked = false;
51 private transient Object unlockedPrivate = null;
52 private transient String description;
53
54 @Override
55 public String getBeanName() {
56 return BEAN_NAME;
57 }
58
59 public void setId(long id) {
60 this.id = id;
61 }
62
63 public long getId() {
64 return id;
65 }
66
67 public void setNickname(String nickname) {
68 this.nickname = nickname;
69 }
70
71 public String getNickname() {
72 return nickname;
73 }
74
75 public void setType(String type) {
76 this.type = type;
77 }
78
79 public String getType() {
80 return type;
81 }
82
83 public void setPrivateKey(byte[] privateKey) {
84 if (privateKey == null)
85 this.privateKey = null;
86 else
87 this.privateKey = privateKey.clone();
88 }
89
90 public byte[] getPrivateKey() {
91 if (privateKey == null)
92 return null;
93 else
94 return privateKey.clone();
95 }
96
97 public void setPublicKey(byte[] encoded) {
98 if (encoded == null)
99 publicKey = null;
100 else
101 publicKey = encoded.clone();
102 }
103
104 public byte[] getPublicKey() {
105 if (publicKey == null)
106 return null;
107 else
108 return publicKey.clone();
109 }
110
111 public void setEncrypted(boolean encrypted) {
112 this.encrypted = encrypted;
113 }
114
115 public boolean isEncrypted() {
116 return encrypted;
117 }
118
119 public void setStartup(boolean startup) {
120 this.startup = startup;
121 }
122
123 public boolean isStartup() {
124 return startup;
125 }
126
127 public void setConfirmUse(boolean confirmUse) {
128 this.confirmUse = confirmUse;
129 }
130
131 public boolean isConfirmUse() {
132 return confirmUse;
133 }
134
135 public void setLifetime(int lifetime) {
136 this.lifetime = lifetime;
137 }
138
139 public int getLifetime() {
140 return lifetime;
141 }
142
143 public void setUnlocked(boolean unlocked) {
144 this.unlocked = unlocked;
145 }
146
147 public boolean isUnlocked() {
148 return unlocked;
149 }
150
151 public void setUnlockedPrivate(Object unlockedPrivate) {
152 this.unlockedPrivate = unlockedPrivate;
153 }
154
155 public Object getUnlockedPrivate() {
156 return unlockedPrivate;
157 }
158
159 public String getDescription() {
160 if (description == null) {
161 final StringBuilder sb = new StringBuilder();
162
163 try {
164 final PublicKey pubKey = PubkeyUtils.decodePublic(publicKey, type);
165
166 if (PubkeyDatabase.KEY_TYPE_RSA.equals(type)) {
167 int bits = ((RSAPublicKey) pubKey).getModulus().bitLength();
168 sb.append("RSA ");
169 sb.append(bits);
170 sb.append("-bit");
171 }
172 else if (PubkeyDatabase.KEY_TYPE_DSA.equals(type)) {
173 sb.append("DSA 1024-bit");
174 }
175 else if (PubkeyDatabase.KEY_TYPE_EC.equals(type)) {
176 int bits = ((ECPublicKey) pubKey).getParams().getCurve().getField()
177 .getFieldSize();
178 sb.append("EC ");
179 sb.append(bits);
180 sb.append("-bit");
181 }
182 else {
183 sb.append("Unknown Key Type");
184 }
185 }
186 catch (NoSuchAlgorithmException e) {
187 sb.append("Unknown Key Type");
188 }
189 catch (InvalidKeySpecException e) {
190 sb.append("Unknown Key Type");
191 }
192
193 if (encrypted) sb.append(" (encrypted)");
194
195 description = sb.toString();
196 }
197
198 return description;
199 }
200
201 /* (non-Javadoc)
202 * @see com.five_ten_sg.connectbot.bean.AbstractBean#getValues()
203 */
204 @Override
205 public ContentValues getValues() {
206 ContentValues values = new ContentValues();
207 values.put(PubkeyDatabase.FIELD_PUBKEY_NICKNAME, nickname);
208 values.put(PubkeyDatabase.FIELD_PUBKEY_TYPE, type);
209 values.put(PubkeyDatabase.FIELD_PUBKEY_PRIVATE, privateKey);
210 values.put(PubkeyDatabase.FIELD_PUBKEY_PUBLIC, publicKey);
211 values.put(PubkeyDatabase.FIELD_PUBKEY_ENCRYPTED, encrypted ? 1 : 0);
212 values.put(PubkeyDatabase.FIELD_PUBKEY_STARTUP, startup ? 1 : 0);
213 values.put(PubkeyDatabase.FIELD_PUBKEY_CONFIRMUSE, confirmUse ? 1 : 0);
214 values.put(PubkeyDatabase.FIELD_PUBKEY_LIFETIME, lifetime);
215 return values;
216 }
217
218 public boolean changePassword(String oldPassword, String newPassword) throws Exception {
219 PrivateKey priv;
220
221 try {
222 priv = PubkeyUtils.decodePrivate(getPrivateKey(), getType(), oldPassword);
223 }
224 catch (Exception e) {
225 return false;
226 }
227
228 setPrivateKey(PubkeyUtils.getEncodedPrivate(priv, newPassword));
229 setEncrypted(newPassword.length() > 0);
230 return true;
231 }
232 }