Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>cn.ucloud.ufile</groupId>
<artifactId>ufile-sdk-java-root</artifactId>
<version>2.7.5</version>
<version>2.7.6</version>
<packaging>pom</packaging>

<name>ufile-sdk-java (root)</name>
Expand Down
2 changes: 1 addition & 1 deletion ufile-sample-java/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@
<dependency>
<groupId>cn.ucloud.ufile</groupId>
<artifactId>ufile-client-java</artifactId>
<version>2.7.5</version>
<version>2.7.6</version>
</dependency>
</dependencies>

Expand Down
2 changes: 1 addition & 1 deletion ufile/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<groupId>cn.ucloud.ufile</groupId>
<artifactId>ufile</artifactId>
<packaging>pom</packaging>
<version>2.7.5</version>
<version>2.7.6</version>

<modules>
<module>ufile-core</module>
Expand Down
6 changes: 3 additions & 3 deletions ufile/ufile-client-java/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@
<parent>
<artifactId>ufile</artifactId>
<groupId>cn.ucloud.ufile</groupId>
<version>2.7.5</version>
<version>2.7.6</version>
</parent>

<artifactId>ufile-client-java</artifactId>
<version>2.7.5</version>
<version>2.7.6</version>
<name>ufile-client-java</name>

<dependencies>
Expand All @@ -27,7 +27,7 @@
<dependency>
<groupId>cn.ucloud.ufile</groupId>
<artifactId>ufile-core</artifactId>
<version>2.7.5</version>
<version>2.7.6</version>
</dependency>
</dependencies>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -184,10 +184,10 @@ protected void prepareData() throws UfileClientException {
String date = dateFormat.format(new Date(System.currentTimeMillis()));

PutStreamRequestBuilder builder = new PutStreamRequestBuilder(onProgressListener);
//keyName 进行了修改
String keyName_tmp = keyName + "?append&" + builder.generateUrlQuery(query);
String queryString = builder.generateUrlQuery(query);
String keyName_tmp = keyName + "?append&" + queryString;
builder.setBufferSize(bufferSize);
builder.baseUrl(generateFinalHost(bucketName, keyName_tmp))
builder.baseUrl(generateFinalHost(bucketName, keyName) + "?append&" + queryString)
.setConnTimeOut(connTimeOut).setReadTimeOut(readTimeOut).setWriteTimeOut(writeTimeOut)
.header(headers)
.addHeader("Content-Type", contentType)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -330,6 +330,7 @@ protected void parameterValidat() throws UfileParamException {
if (expiresDuration <= 0)
throw new UfileParamException(
"The required param 'expiresDuration' must > 0");

}

/**
Expand Down Expand Up @@ -384,4 +385,3 @@ public interface CreatePrivateUploadUrlWithHeadersCallback {




Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
import com.google.gson.JsonElement;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.List;


Expand Down Expand Up @@ -168,12 +167,7 @@ public String createUrl() throws UfileClientException {
}

if (attachmentFileName != null && !attachmentFileName.isEmpty()) {
try {
attachmentFileName = Encoder.urlEncode(attachmentFileName, "UTF-8");
builder.addParam(new Parameter("ufileattname", attachmentFileName));
} catch (UnsupportedEncodingException e) {
throw new UfileClientException("Occur error during URLEncode attachmentFileName", e);
}
builder.addParam(new Parameter("ufileattname", attachmentFileName));
}


Expand Down Expand Up @@ -258,5 +252,6 @@ protected void parameterValidat() throws UfileParamException {
if (expiresDuration <= 0)
throw new UfileParamException(
"The required param 'expiresDuration' must > 0");

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import cn.ucloud.ufile.util.Parameter;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.List;

/**
Expand Down Expand Up @@ -98,12 +97,7 @@ public String createUrl() throws UfileClientException {
.baseUrl(generateFinalHost(bucketName, keyName));

if (attachmentFileName != null && !attachmentFileName.isEmpty()) {
try {
attachmentFileName = Encoder.urlEncode(attachmentFileName, "UTF-8");
builder.addParam(new Parameter("ufileattname", attachmentFileName));
} catch (UnsupportedEncodingException e) {
throw new UfileClientException("Occur error during URLEncode attachmentFileName", e);
}
builder.addParam(new Parameter("ufileattname", attachmentFileName));
}

String url = builder.generateGetUrl(builder.getBaseUrl(), builder.getParams());
Expand Down Expand Up @@ -152,5 +146,6 @@ protected void parameterValidat() throws UfileParamException {
if (bucketName == null || bucketName.isEmpty())
throw new UfileRequiredParamNotFoundException(
"The required param 'bucketName' can not be null or empty");

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -105,13 +105,21 @@ protected void prepareData() throws UfileClientException {
String date = dateFormat.format(new Date(System.currentTimeMillis()));

String xUfileCopySource = String.format("/%s/%s", sourceBucketName, sourceObjectName);
String encodedXUfileCopySource;
try {
encodedXUfileCopySource = String.format("/%s/%s",
Encoder.urlEncode(sourceBucketName, "UTF-8"),
Encoder.urlEncode(sourceObjectName, "UTF-8"));
} catch (java.io.UnsupportedEncodingException e) {
throw new UfileClientException("Occur error during URLEncode copy source", e);
}
String xUfileCopySourceRange = String.format("bytes=%d-%d", rangeStart, rangeEnd);

PutJsonRequestBuilder builder = new PutJsonRequestBuilder();
builder.baseUrl(builder.generateGetUrl(generateFinalHost(info.getBucket(), info.getKeyName()), query))
.addHeader("Accpet", "*/*")
.addHeader("Accept", "*/*")
.addHeader("Date", date)
.addHeader("X-Ufile-Copy-Source", xUfileCopySource)
.addHeader("X-Ufile-Copy-Source", encodedXUfileCopySource)
.addHeader("X-Ufile-Copy-Source-Range", xUfileCopySourceRange);

String authorization = authorizer.authorization((ObjectOptAuthParam) new ObjectOptAuthParam(HttpMethod.PUT, info.getBucket(), info.getKeyName(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ public String authorization(ObjectOptAuthParam param) {
json.addProperty("content_type", param.getContentType());
json.addProperty("content_md5", param.getContentMD5());
json.addProperty("date", param.getDate());
if (param.getXUFileCopySource() != null)
json.addProperty("x_ufile_copy_source", param.getXUFileCopySource());
if (param.getXUFileCopySourceRange() != null)
json.addProperty("x_ufile_copy_source_range", param.getXUFileCopySourceRange());
if (param.getOptional() != null)
json.addProperty("optional", param.getOptional().toString());
if (param.getPutPolicy() != null && param.getPutPolicy().getPolicy() != null)
Expand Down
4 changes: 2 additions & 2 deletions ufile/ufile-core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@
<parent>
<groupId>cn.ucloud.ufile</groupId>
<artifactId>ufile</artifactId>
<version>2.7.5</version>
<version>2.7.6</version>
</parent>

<artifactId>ufile-core</artifactId>
<version>2.7.5</version>
<version>2.7.6</version>
<name>ufile-core</name>

<dependencies>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,4 +103,5 @@ public static String urlEncodePath(String path, String enc) throws UnsupportedEn
}
return sb.toString();
}

}
108 changes: 108 additions & 0 deletions us3_maven_private.asc
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
-----BEGIN PGP PRIVATE KEY BLOCK-----

lQdGBFwbDC0BEADLwhkTF0u6oXoYP8PgPBv5e5bn6LPa4F8IekKyBFZEzUoebtv7
hTzXWkgjnw8jUIFHkwd+skjVOyDMXtsKLWqeavewUaZVZtbq3Gzo64D5+z0ydZ7Y
uTaEr6dbE+kxnaIgsrJyVznZI02dv+3G31aJqCyUVhgnZeU0pvDslQDChXxWWD1g
dTUh8kT/pIZ7pVn8zRDP9xibqwFUV4XHpRGV62lsvf2ig4I5y9M7dZ5ngOPy/F7+
GNtIWZVRhzBUztwZ5vZ4mKsWrK2ck08wFtawTcdJpYxHCeALxm5ess5KZC+oBlG3
933fsFcq4orYaOY46jPglmO32lNs79cuSMStx0Qw+23hmpmNZBphQBpNhXQ+QPpM
eCGkRzM6Cv6++8mvFttnOS6pbzfnmlgK1R1BLR5Aji0reIDBUhj4dYcqj0qJoym+
kj9PlUZHqvcYnWd8JZX5k58TJjvXe5iuAl2KRik64F5AZwaEZKi0jg+1m4fKCnl0
+etjVp3SdOIIpw7wq3F6OqcuTMv6RdZAD/YYKMNBQjg3tdjhAGrK9b8MUf2EI6fo
Q98aBKK8jwMzR4slAWqAiLD73Q15hjzZ9Gsue1fNS4eBwyXGdTF9thW3l+L4jM9T
UPdlzf7uG6mMBG964MSTcBmazLNykUuMqqtNsUJFso2wMWgrNtAI0RxDTQARAQAB
/gcDApiDg8S6gJMh56/zrLsC15+vFzVvtTT6ydPcfhsp8VDIdLQ3BbPgd4Sj9ntH
h8BgRs7FkLDPWpSVLRn6owtbn9CEAQ8dgHVK0Jy1n+ry0KchVf8gF626tIyWn3DA
XITl6phhgBy8MBVJeo+XsFsFm6pEmDkYxuRETW5TmNIb6I9FRjP7E6P3e25ZAaqg
1YL3AxOIcydOdlEj+ktn8sjNFn0oh/UGmU5EsrAwmFqqOKriwO1cUy2yzzqSdazd
XVRH6WFdyAJ3Uo8jEpJf11qwFy2yJ8QrwmfzmhgO778SDYcNQEI10ovMbDdrecip
a4E4m6ZhOXYW0u4VOURCcWBeplcEmPDqoVFnFbtrmWSGg0ZoPtOt4NIoXnzk9sB+
TV1HI5dgc984F9iBHvrdAEO1iMQclw/8yxG8n/rPFj23YebTAScpV5LG6bqWAgjp
AWlPR+EwwFD/F+orYyRf1LlBqBuF8rA0qvXZ1jW2zqUInSvC0cDEmVw4322jxsFL
XpKQTsKI7POMWhvb6nlxPZsL2oAATqVWcqbzQR0WT7yzUyRdScF4AoQQ57CpPZRf
GR+Jb0LMy5MSt9K8E2GNZlotZ9Vo7tNBr46hawhIUVlf0v1Ps9UjhtHPTnPb+tVW
2epFXuUKCP4Os9X9wVqKD5qE61Xedz5Ao0loCF2ckkSCOJ50thcPHrWzgsUSdON6
fVU0KRCL+koFEjXMSAJGgOg2piGsV2gc2GvLm4ynw3QuwOe6b5qoMZMGBRiiJwQI
ebX4TxvT6hw0cTzb76QkmwIhv72pCsqN/F7Sz0RtCZeX9EIctvQWWT2wNX5yAsF7
Ixx/kcGMkwXCciWM746UrqpBZJJ+M+gAbmw8VzJVmDdm0UQ68uU7MAS3Jb3jaAhS
HgbjX5SWIHzLuP2fVDMn0s18qI0TmhtHkl+QL+aK5BQ86pt4Or/mTPbs4ZcPPo5L
hYd8lgkggUay6kaCq5KXE03N/2p+/zIxZpM/f9WsrBiyAXech8Cc5MWwH0qlX3K2
Dv7NCPPhZu6nX/HJi2xufe2+YU4iHXK5B1bAWXZvGQMXw8Duz0JTdybVOIXYSoRa
GCDLaStv+mBv/JSvZtLeqJTxY6DX3f9doOsnFVP2Kx71WxjuRSJTEuDwi15SgKOJ
gbwdg9hF19GTd62Y3IF376zdQtpn79hRGXVBB8LRXSevUdKCM+mZPUS4BirOnB9u
6y/vaHgDDdf/awxKB1NFd9Wt1M/5oaBirLkqXaGr+bOvn1lUb1ciVs/Ex4L0UjLT
8XMjnKEW/9jXTZbUmRLgqYHCDOgIOAyCbXtV2JCz9PETwes14aP+9LLkmtX6/E42
wFfv5j59Cjac58Omev2X3sbvMUM+pWB5YBPbWfl2sT64f02jV0IcNnr3qRJj9yHi
Wb/+7rBtRhVZpB9Fk/YJ7e/+K+ORVkuRsSQMtslt896dMwjkqHSCvQ0LAGz6GmC+
cbJGOquClQXWPiFSmqerBrJQeGsUCAAiUQsy9zkoYKGJbDl2gMcfWJsrKpuomjHD
Mrq716ngqm3b66cbu3V2wJ3kpbx3UEEXzRtQhu8s3T0tjfBAbp2KMCTXurZusryg
6WKZ7nHx+OaTM+C5fOTD5z+GKSAx1L/eSjA7Fj/OztEYMzI6Lm8ZX6Lk9PM9Svkg
hZR5R7AQtIlMvwM3zy3ANZ6rhpWt4JHA2ShqH/Ri1vhtmJY5JxYcXNZAfUGZcY1m
f5Xual2DsthfJ37a+ZJXMGhwn3oWeJcnPKl/x0RoyUZQYcnJMaiWtqS0P0pvc2h1
YVlpbiAoVWZpbGUgU0RLIGZvciBKYXZhIEtleWNoYWluKSA8am9zaHVhLnlpbkBp
Y2xvdWQuY29tPokCVAQTAQgAPhYhBCMU0JVPHXqODY19qGv0nP8O0MNEBQJcGwwt
AhsDBQkLSdgABQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEGv0nP8O0MNET8YQ
ALcoQc3IodJlCt+Tys36i8GyqCF5Sl7nso/i7Zv0+2ypAyAQCgvIbtTVhajvlBGh
s1UXCQbxD82TeSrO5lZIb1UM1xflAP6Vh0NE7NiNlB/ZtbuSKbjK3xdqSLgRQTcb
0F1sV+9Kr3mnCs1+AhuDHPlmBW7fSNEsGy3nBXcT9PHgt3/bev00Q4UehWDD9LXA
bZOFNLard0O5nUPYpQ8xoqgn1zv/FHu899cVQXamo9mBxOFzzmpLV4B2hm715XEb
sKMZem7k0L3jNM2jnYYrr1Bsb6UedK8wjW4KpPw9hu92QiiFVrJeVhkqvidvhqs5
KsNHmbwtDCBUxPOSA8s4mVpWoMHaz68etRYncSqLV/PD+hT0HGCAUHXziK2CqQYt
8KNxrvcXMTj0mSjsT2LE7CVZV/S1ZFHipoRqTzDghBxWtA07wXqOrSrrp2VmGcAX
7c0iT98vk2Y77LxGMiDIobAH1aoH5X2AaojhEUnc/zs1XTEVwgeT2XdebFOXU7ds
JLXdNMJXZpA77+hQiKy6FinE45UoYuLtBcHLDaxqbi2VS3hxShrzZ41cjiSAGmYG
xvpbxX4eY8R8V11W/jT3QFYjrtR1LCiH7DwASlej6sgVNvtol+NXfrDANE9+ztxs
AGw50WQZOXGzQ7dGcEZF/Rt0SUT+Jt0iaY/iF2r12ubMnQdGBFwbDC0BEADnjC0f
Jxd/XeCIC0MO9/CzUm3s/m1MPDvu4EfZDWr7A0Cb5ZfbuMrvDVDLpVmTsHMTvqFg
frx9bc1yWRT7XJ8UW+SAJirImNB5h2MzwVZwBQIzpq3/427oI9JAvdfjiNAX8gZU
/1eSOvDgOZfjgIlcXjdVSMDG8BCUVrqkGKNiQRVoUHBlwbCGqKFTrGoV7YRIps13
CYfaAXNGd3zQ9Sj2XSIQVbckm6RPCpaqhN1RcsiFMus5pwS7l8gB9pev6nIxy45N
hyIbgzTdHBJ66yNs0gvERB9P3jtU7vFrIY3pRF/T+YzsPiHXgKG6e5pbNCaN0FgW
3FZDmB2+QEICRydxdjhcwLenSE0TXxtVZCrqkpTefoc3KS/oJE8JUWQ6fK276q1S
CgJy6W2UrUxcxx2omTEOGG09n50Z8035G2EwZsZAM/NdpEArTr2Tiym2Au31GBxp
KW8cPh4Sisi+OTly9nK5mHAbxN8IGG15bGGoKmj+3NAQxAJ/fRl5WaNet08J6UqY
s3KmB7hoY01TQEtx9Ret9pa3jQ+B0FW7/k2/V7c3UPAbYODoVxNi971jIM+lnGB2
gK34ndOQFiR5JogVsSZf+tqdrhREgPa64Cm4LzDpj26ajuur438qenc3M3nY2Dii
4rZC8PGuUbh9Kn4bZ90AHS5hojTvKy4JuJJk7wARAQAB/gcDAv210fIoAoJI51S4
TWwm8GNSoJlUmB/BdtbhjOlvTJuS8hWFrOCyNAI97uKa7jukbm6EKh3Rn0JSUXr9
LWtLOH4GyY28jPAgLlMlme9Ts9iMvUMF7Vv594ilv0hstnvStvgqEZUtjKwZlgri
Ol51h0NkFy/Q5Goi2hlY9vaGo9RxxzkAXa1LBpPEwE+VI3iXkoWQc4hiztwcthpz
KUMX/8PkiRT+RdB+JaAQmAFq7+Nfl/1LDG+CnT5mJnXN4Pfm71rPK7e/f55Pzq9H
PR4sEKavt+DYMOJJCiOBxC9HCSZXuVoJHIu1EZrNvehCVMlDNLTZoDIa+H2VFxYN
ZzZ3q5J3U10Dr1NwWpOGX7nhmUFBQNpFKglkwLlhJE753BR+yMQ+HsK+w710JEsR
8z2YhkZotqGn00DiU4mD49jbPW9qfOxay36f9NTZbFHmjzQuRiUhHVX68nMWRiY7
19h3Kugwy5YkwNq7A+Tsi1ZI+aGaKUNOeQ4XVHVmjf8pT/+yWqT5QDYtpbED1Vvl
DLrchsrZ2zjspBGbKFQetOntL4TEo6OEMUw2dKOrGlfvcSRLR5zXME3CToWDMyQp
mrymJ9MgeCnsyaCTSynEvPRBS/iO5v1Hm9EViclxJjnG7OANsVKzi3JwTToETrPt
EEyAXNB48zm9NW/nCnZp0o1YAr5LM4LDyC02x6HYkKfHk6A1nRANa/eVlIfsJB02
WFsHk42kW0MUg1x9R9jPUzKWw73Zu7TjDwsIWlrJrEOGp0bYzUnppn1Sl0qum65t
IY+XWvTuhNBgriiCITH6o4l53yTkOFleja8nHSiBmypNJ0816FQH7hk7OWPwGI8p
38QYlDnemRc+5g13E7a4M8ra9XmafxG8LGxc5G1CZh1q1SppIy2wwxxl6LDo1D9Q
15a9vcrjpjtqs9ccxMqvDbKVkKd0/0wOIUxGYOx8PYhwMkUDeHR3p7uTKJqMMYx1
9xIaSv9TuXuBBmehP0J8T9Ekvo7hiDJSee7wv+Z6FJnczvJF93fdoJSDsuL4neRg
29DRYATeWPwlfLstLC82jT8bIkTODs3582wsr1tBZZ3+bV+54xYddy8GLox0x4CA
NQQkj4UYitM2Je5RR3c0wY+tOVuPEawyRLdcqoZ2zFzMvelxbSK1AqX1ibKdm3NF
NL/6Jar/I0XMYVzbrhBPNAcDGhsnr6A2efWvyN0zIDV9Xj4Qh1lmClEq3ByldmCw
oMumpxF19QQVmHHhAJP24rXmUkDPCWnHBMy37dg346Y7blnbdwjNaPHI8Mlqjf/M
mxrWTN2gmqSyEVwIXyxiGhKASfL5TzJCchPvB92h7SzWQkk8alVzb6Tq70J5ybVD
bszKBnzEq8vIUCrygCrJvMQ6LF6eBgKAiacscXPHYLHCnNAPdiyaXsCFuI9jaR1H
vTLSvQHbaQvvzNeDya9wKTLmm2Bwq/Ai1UbJxnQ79+ARjIQIugGqq7vVoY00r40+
7L9J+/xVCPBW3fG2XVKnbDwABBT5MM73XXBX7GlrCaNtjpE1cBDEJ1eh9DksQBuP
+V4CCZh7WXVB4yrdPt82O8NNbySfxbtVet9oTnMX76Bm5lkQD7JZk+CK6XkXeE7M
QS/b92AKZgBuZlIAqIUx/irHikUeE1Y/k0+Y9ZJM0W10zvQpllDWBJyyEHkdx2GL
eDbh+WUUWFrh9zFzGdkFUg/nXtijdOHqk5IxKHLQyw2mtb1/jLcN3GrMrYmDzRp9
6Wysr0PciBR4u8Hg3TieS91MneSivTArgwuJAjwEGAEIACYWIQQjFNCVTx16jg2N
fahr9Jz/DtDDRAUCXBsMLQIbDAUJC0nYAAAKCRBr9Jz/DtDDRBn9EACdxqD1EbFW
z7QxHn7TcDDcrB27hixWB/8GK/bRKMbCx5g0L6/19m0BlPzQZ5VUOibQTbtfY+uA
VdIh7tA34/ZHDAin5mcsJoaCVjlXevfLOD6yJUbfcyAHj9d5ZthmEbNIJQ3Bszcy
jc7CkSHlvMJnHZRAzD4OJRZH7UagjdUIkVq/ZOKBrkC0hK5ppeG/UXAKna/i/SgN
qecfCTIow33pmCzWga9titTVh3DwQoFLdEnOgEeOJCD43IYI5Qm8d9v1uzpZYfuC
e/Ze1GAKNzXUzdm9eNVzrLJozo73JFMJF1mJLJUUKxrC/FL3s1uIWJw08TQ7KZCC
xseNYvDnZPU6fiHWfMcBDvc+bS7UFN2pKfIxUb5ybr2R34jDV0w3BnEAsRFolBSE
I/27IH6J9JHXKSAK/qR9FwvM6X0qTSp6XM13L9iQ6SKosX1sxNtL+/9NUytXFFPj
B85zNpDBusqEUne6vCHhORwWu7wm1uztI6QdiIB3rfTgnNVjNFED67rfjidDofGU
m8ePw0RD4lkmOBjJLYqywuEqy/icXSHJy+VqdSZQi7DbXA4tK3lx5wKcY7XxICBU
DQmb2QAg2rQVHowIE+EUQ6pD/5XTwIAUNscsGgOCIOMe89coQFVpC5I44Eg5+NJH
mwW/Nmh5WP2sSfGYak6pWxtNzlJYY0xIxg==
=B/sU
-----END PGP PRIVATE KEY BLOCK-----
52 changes: 52 additions & 0 deletions us3_maven_public.asc
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----

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
=KF+v
-----END PGP PUBLIC KEY BLOCK-----