public synchronized String getKeyType() { return key.getKeyType(); }
public static InsertableClientSSK create(FreenetURI uri) { if(!uri.getKeyType().equals("KSK")) throw new IllegalArgumentException(); return create(uri.getDocName()); }
public static BaseClientKey getBaseKey(FreenetURI origURI) throws MalformedURLException { String keyType = origURI.getKeyType(); if("CHK".equals(keyType)) return new ClientCHK(origURI); if("SSK".equals(keyType)) return new ClientSSK(origURI); if("KSK".equals(keyType)) return ClientKSK.create(origURI.getDocName()); if("USK".equals(keyType)) return USK.create(origURI); throw new MalformedURLException("Unknown keytype from "+origURI); }
protected static ClientKeyBlock innerEncode(RandomSource random, FreenetURI uri, Bucket sourceData, boolean isMetadata, short compressionCodec, int sourceLength, String compressorDescriptor, boolean pre1254, byte cryptoAlgorithm, byte[] cryptoKey) throws InsertException, CHKEncodeException, IOException, SSKEncodeException, MalformedURLException, InvalidCompressionCodecException { String uriType = uri.getKeyType(); if(uriType.equals("CHK")) { return ClientCHKBlock.encode(sourceData, isMetadata, compressionCodec == -1, compressionCodec, sourceLength, compressorDescriptor, pre1254, cryptoKey, cryptoAlgorithm); } else if(uriType.equals("SSK") || uriType.equals("KSK")) { InsertableClientSSK ik = InsertableClientSSK.create(uri); return ik.encode(sourceData, isMetadata, compressionCodec == -1, compressionCodec, sourceLength, random, compressorDescriptor, pre1254); } else { throw new InsertException(InsertExceptionMode.INVALID_URI, "Unknown keytype "+uriType, null); } }
public ClientSSK(FreenetURI origURI) throws MalformedURLException { this(origURI.getDocName(), origURI.getRoutingKey(), origURI.getExtra(), null, origURI.getCryptoKey()); if(!origURI.getKeyType().equalsIgnoreCase("SSK")) throw new MalformedURLException(); }
public static InsertableUSK createInsertable(FreenetURI uri, boolean persistent) throws MalformedURLException { if(!uri.getKeyType().equalsIgnoreCase("USK")) throw new MalformedURLException(); InsertableClientSSK ssk = InsertableClientSSK.create(uri.setKeyType("SSK")); return new InsertableUSK(ssk.docName, ssk.pubKeyHash, ssk.cryptoKey, ssk.privKey, uri.getSuggestedEdition(), ssk.cryptoAlgorithm); }
static FreenetURI checkEmptySSK(FreenetURI uri, String filename, ClientContext context) { if("SSK".equals(uri.getKeyType()) && uri.getDocName() == null && uri.getRoutingKey() == null) { if(filename == null || filename.equals("")) filename = "key"; // SSK@ = use a random SSK. InsertableClientSSK key = InsertableClientSSK.createRandom(context.random, ""); return key.getInsertURI().setDocName(filename); } else { return uri; } }
/** * Create from a URI. */ public ClientCHK(FreenetURI uri) throws MalformedURLException { if(!uri.getKeyType().equals("CHK")) throw new MalformedURLException("Not CHK"); routingKey = uri.getRoutingKey(); cryptoKey = uri.getCryptoKey(); byte[] extra = uri.getExtra(); if((extra == null) || (extra.length < 5)) throw new MalformedURLException("No extra bytes in CHK - maybe a 0.5 key?"); // byte 0 is reserved, for now cryptoAlgorithm = extra[1]; if(!(cryptoAlgorithm == Key.ALGO_AES_PCFB_256_SHA256 || cryptoAlgorithm == Key.ALGO_AES_CTR_256_SHA256)) throw new MalformedURLException("Invalid crypto algorithm"); controlDocument = (extra[2] & 0x02) != 0; compressionAlgorithm = (short)(((extra[3] & 0xff) << 8) + (extra[4] & 0xff)); hashCode = Fields.hashCode(routingKey) ^ Fields.hashCode(cryptoKey) ^ compressionAlgorithm; }
public FreenetURI turnMySSKIntoUSK(FreenetURI uri) { if(uri.getKeyType().equals("SSK") && Arrays.equals(uri.getRoutingKey(), pubKeyHash) && Arrays.equals(uri.getCryptoKey(), cryptoKey) && Arrays.equals(uri.getExtra(), ClientSSK.getExtraBytes(cryptoAlgorithm)) && uri.getDocName() != null && uri.getDocName().startsWith(siteName)) { String doc = uri.getDocName(); doc = doc.substring(siteName.length()); if(doc.length() < 2 || doc.charAt(0) != '-') return uri; doc = doc.substring(1); long edition; try { edition = Long.parseLong(doc); } catch (NumberFormatException e) { Logger.normal(this, "Trying to turn SSK back into USK: "+uri+" doc="+doc+" caught "+e, e); return uri; } if(!doc.equals(Long.toString(edition))) return uri; return new FreenetURI("USK", siteName, uri.getAllMetaStrings(), pubKeyHash, cryptoKey, ClientSSK.getExtraBytes(cryptoAlgorithm), edition); } return uri; }
public static InsertableClientSSK create(FreenetURI uri) throws MalformedURLException { if(uri.getKeyType().equalsIgnoreCase("KSK")) return ClientKSK.create(uri); if(uri.getKeyType().equals("SSK")) { if(extra == null) throw new MalformedURLException("Inserting pre-1010 keys not supported"); throw new MalformedURLException("Not a valid SSK insert URI type: "+uri.getKeyType());
this.isMetadata = isMetadata; this.sourceLength = sourceLength; isSSK = uri.getKeyType().toUpperCase().equals("SSK"); if(addToParent) { parent.addMustSucceedBlocks(1);
if ("USK".equals(b.key.getKeyType())) { if (!b.key.setSuggestedEdition(key.getSuggestedEdition()).equals(key)) { return false;
if(!(uri.getKeyType().equals("CHK") && !uri.hasMetaStrings())) fullKeys = true; } else
/** * Create an inserter, either for a USK or a single block. * @param forSplitfile Whether this insert is above a splitfile. This * affects whether we do multiple inserts of the same block. */ private ClientPutState createInserter(BaseClientPutter parent, Bucket data, short compressionCodec, InsertContext ctx, PutCompletionCallback cb, boolean isMetadata, int sourceLength, int token, boolean addToParent, ClientContext context, boolean freeData, boolean forSplitfile) throws InsertException { FreenetURI uri = block.desiredURI; uri.checkInsertURI(); // will throw an exception if needed if(uri.getKeyType().equals("USK")) { try { return new USKInserter(parent, data, compressionCodec, uri, ctx, cb, isMetadata, sourceLength, token, addToParent, this.token, context, freeData, persistent, realTimeFlag, forSplitfile ? ctx.extraInsertsSplitfileHeaderBlock : ctx.extraInsertsSingleBlock, cryptoAlgorithm, forceCryptoKey); } catch (MalformedURLException e) { throw new InsertException(InsertExceptionMode.INVALID_URI, e, null); } } else { SingleBlockInserter sbi = new SingleBlockInserter(parent, data, compressionCodec, uri, ctx, realTimeFlag, cb, isMetadata, sourceLength, token, addToParent, false, this.token, context, persistent, freeData, forSplitfile ? ctx.extraInsertsSplitfileHeaderBlock : ctx.extraInsertsSingleBlock, cryptoAlgorithm, forceCryptoKey); // pass uri to SBI block.nullURI(); return sbi; } }
private BlockItem getBlockItem(BlockItemKey key, ClientContext context) throws InsertException { try { synchronized(this) { if(finished) return null; } if(persistent) { if(sourceData == null) { Logger.error(this, "getBlockItem(): sourceData = null", new Exception("error")); fail(new InsertException(InsertExceptionMode.INTERNAL_ERROR), context); return null; } } Bucket data = sourceData.createShadow(); FreenetURI u = uri; if(u.getKeyType().equals("CHK")) u = FreenetURI.EMPTY_CHK_URI; if(data == null) { data = context.tempBucketFactory.makeBucket(sourceData.size()); BucketTools.copy(sourceData, data); } CompatibilityMode cmode = ctx.getCompatibilityMode(); boolean pre1254 = !(cmode == CompatibilityMode.COMPAT_CURRENT || cmode.ordinal() >= CompatibilityMode.COMPAT_1255.ordinal()); return new BlockItem(key, data, isMetadata, compressionCodec, sourceLength, u, persistent, pre1254, cryptoAlgorithm, cryptoKey); } catch (IOException e) { throw new InsertException(InsertExceptionMode.BUCKET_ERROR, e, null); } }
String type = block.desiredURI.getKeyType().toUpperCase(); if(type.equals("SSK") || type.equals("KSK") || type.equals("USK")) { blockSize = SSKBlock.DATA_LENGTH;
return originalURI; } else { throw new IllegalArgumentException("Not implemented yet for this key type: " + getKeyType());
FreenetURI uri = client.insert(block, "", (short)0, ictx); assertEquals(uri.getKeyType(), "SSK"); FetchContext ctx = client.getFetchContext(FILE_SIZE*2); ctx.localRequestOnly = true;
FreenetURI uri = client.insert(block, "", (short)0, ictx); assertEquals(uri.getKeyType(), "SSK"); FetchContext ctx = client.getFetchContext(FILE_SIZE*2); ctx.localRequestOnly = true;
HTMLNode content; String filenameHint = null; if (key.getKeyType().equals("CHK")) { String[] metas = key.getAllMetaStrings(); if ((metas != null) && (metas.length > 1)) {