SlideShare a Scribd company logo
1 of 79
Cryptography 101
www.craftsmen.nl
michel@craftsmen.nl
@MichelSchudel
For Developers
JavaZone
Introduction
www.craftsmen.nl
michel@craftsmen.nl
@MichelSchudel
Basic understanding of
cryptographic concepts and
how they’re done in
Cryptography (or cryptology; from Greek
κρυπτός, kryptos, "hidden, secret"; and
γράφ, gráph, "writing", or -λογία, -logia,
respectively) is the practice and study of
hiding information.
https://en.wikipedia.org/wiki/Outline_of_cryptography
What does cryptography solve?
Confidentiality Integrity Authenticity
Key components of cryptography
Data
Algorithm
Key
<div>Icons made by <a href="https://www.flaticon.com/authors/freepik" title="Freepik">Freepik</a> from <a href="https://www.flaticon.com/" title="Flaticon">www.flaticon.com</a></div>
Contemporary cryptography
Symmetric encryption Asymmetric encryption
Hashing
JCA
(Java Cryptography Architecture)
JCE
(Java Cryptography Extension)
https://www.bouncycastle.org/
Advanced
stuff
How to plug in a security provider
• JDK8 and previous:
• Update jre/lib/security/java.security
• Place specific provider JAR in lib/ext
• JDK9 and onwards:
• Update conf/security/java.security
• Place specific provider JAR on classpath
#
# List of providers and their preference orders (see above):
#
security.provider.1=sun.security.provider.Sun
security.provider.2=sun.security.rsa.SunRsaSign
security.provider.3=org.bouncycastle.jce.provider.BouncyCastleProvider
Or register it in
java.security
file
Security.addProvider(new BouncyCastleProvider());
(extends java.security.Provider)
JCA /JCE API Summary
Interface / class Function
Security Provider configuration
KeyGenerator Generates symmetric keys
Key Represents key material
Cipher Encryption algorithm
SecretKeyFactory Converts symmetric key material to
SecretKey abstraction
KeyPairGenerator Generates public / private keys
KeyPair Public / private keypair
KeyFactory Converts public / private material to Key
abstraction
KeyStore Storing mechanism for keys and
certificates
MessageDigest Hashing
HMAC Combines hashing and encryption
1. Hashing
2. Symmetric encryption
3. Asymmetric encryption
4. Digital signatures
5. Certificates
Today we’re going to cover:
Hashing
Deterministic
Fixed size
One-way
Psuedo
Random
Hashing
Algorithms
MD-5 (hash size 128 bits)
SHA-1 (hash size 160 bits)
SHA-256 (hash size 256 bits)
Hashing
https://www.computerworld.com/article/3173616/the-sha1-
hash-function-is-now-completely-unsafe.html
Collisions
Current BitCoin hashrate: 300 quadrillion SHA-256 hashes per second
(300x10^15)
Collision attack: calculate 2^128 hashes
Time needed at Bitcoin’s current rate: 3.6x10^13 years
Age of the universe: 13.7x10^9 years
data1 <> data2 -> Hash(data1) == Hash(data2)
My message
digest
68B1282B91DE2C054C36629CB8DD447F12F0
96D3E3C587978DC2248444633483
MessageDigest
static
getInstance(“SHA-256”)
Hashing in
Application: password hashing
Application: bitcoin block mining
transaction{from: michel, to: javazone, kudos, 5}
transaction{from: michel, to: jfokus, kudos, 4}
nonce: 0
transaction{from: michel, to: javazone, kudos, 5}
transaction{from: michel, to: jfokus, kudos, 4}
nonce : 1
transaction{from: michel, to: javazone, kudos, 5}
transaction{from: michel, to: jfokus, kudos, 4}
nonce : 2
nonce++
nonce++
Block mining
SHA-256 000084E534…..
SHA-256 D63C34F5D6…..
SHA-256 23A984E534…..
Hash of a block should start with 0000….
1. Hashing
2. Symmetric encryption
3. Asymmetric encryption
4. Digital signatures
5. Certificates
Symmetric encryption
Symmetric encryption
“ JavaZone ”
3H6V3E98
Encryption
AlgorithmB4 C3 F8 32 87 A9 6E
• DES (Data Encryption Standard)
• block size 64 bits
• key size 56 bits
• AES (Advanced Encryption Standard)
• block size 128 bits
• key size 128/ 192 / 256 bits
https://en.wikipedia.org/wiki/Advanced_Encryption_Standard
Symmetric encryption
Algorithms
Symmetric encryption in
KeyGenerator
Key
generateKey(keySize, for example 192)
Cipher
init(key)*
My message
doFinal
4fg67d34lk4lk
static
getInstance(“AES”)
static
getInstance(“AES”)
Key
Key size restrictions
“Illegal key size...” (calling init with keysize 192)
Limit on key sizes outside USA
• Install “unlimited strength jurisdiction policy files”
• /jre/lib/security/local_policy.jar, export_policy.jar
Java 8u152 includes unlimited strength jars
Java 8u162 and up have unlimited strength by default
https://golb.hplar.ch/2017/10/JCE-policy-changes-in-Java-SE-8u151-and-8u152.html
AES Encryption (with ECB)
Electronic CopyBook Encryption (ECB)
JavaZone JavaZone JavaZone
12345678 12345678 12345678
Cipher Block Chaining
(IV)
Symmetric encryption with IV in
SecureRandom
IvParameterSpec
nextBytes(array)
init init
My message
doFinal
4fg67d34lk4lk
KeyGenerator
Key
generateKey (192)
static
getInstance
(“AES”)
Cipher
Static
getInstance
(“AES”)
static
getInstance(“SHA1PRNG”)
AES Encryption with CBC
Application: Encrypt a Wallet (or zip file)
“myPassword” PBKDF2 SHA256 AES
Password-Based Key
Derivation Function
Key exchange
Martin
Hellman
Whitfield
Diffie
1. Hashing
2. Symmetric encryption
3. Asymmetric encryption
4. Digital signatures
5. Certificates
Asymmetric keys
(public key cryptography)
Public key algorithms
• Diffie-Hellman key agreement protocol
• RSA (Rivest-Shamir-Adleman) – key size 1024,2048, 3072
• ECC (Elliptic Curve Cryptography) – keysize 128
Asymmetric cryptography in
KeyPair
generateKeyPair
init(keyPair.getPublic())
Cipher
init(keyPair.getPrivate())
KeyPairGenerator
static
getInstance(“RSA”)
Cipher
static
getInstance(“RSA”)
My message
doFinal
4fg67d34lk4lk
My message
doFinal
RSA Encryption
Don’t use Asymmetric encryption to encrypt large blocks of data
RSA in particular is slow
…but you CAN use it for…
• Agreeing on symmetric keys (Diffie-Hellman)
• Encryting / Decrypting symmetric keys
• Encrypting hashes, or message digests (Digital Signature)
1. Hashing
2. Symmetric encryption
3. Asymmetric encryption
4. Digital signatures
5. Certificates
Confidentiality Integrity Authenticity
Digital signatures
Digital signatures
message message
“Hi, Alice!”
“Hi, Alice!”“I need money,
Alice!”
Calculate
HMAC - keyed-hash message authentication code
HMAC in
KeyGenerator
static
getInstance(“HMACSha256”)
Mac
static
getInstance(“HMACSha256”)
Key
generateKey(keySize)
init(key)
My message
4fg67d34lk4lk MAC
doFinal
HMAC
PUBLIC KEY
(CERTIFICATE)
VALIDATE
PUBLIC KEY
Digital signature using Asymmetric encryption
Digital signatures in
KeyPair
generateKeyPair
init(keyPair.getPrivate())
Signature
init(keyPair.getPublic())
KeyPairGenerator
static
getInstance(“RSA”)
Signature
static
getInstance(“RSA”)
My message
sign
4fg67d34lk4lk
verify
update
Digital signature
Application: Signing crypto transactions
1. Hashing
2. Symmetric encryption
3. Asymmetric encryption
4. Digital signatures
5. Certificates
Confidentiality Integrity Authenticity
https://www.jscape.com/hubfs/images/csr-ca-signed-server-certificate.png
What is in a certificate signing request?
• Common Name (CN): The fully qualified domain name (FE *.mydomain.com)
• Organization (FE myCompany)
• Organizational Unit (FE IT)
• City (FE “Oslo”)
• State /Country/ Region (“Norway”)
• Email address
• Public key
-----BEGIN NEW CERTIFICATE REQUEST-----
MIIC3TCCAcUCAQAwaDELMAkGA1UEBhMCTkwxCzAJBgNVBAgTAk5MMRMwEQYDVQQH
...
-----END NEW CERTIFICATE REQUEST-----
https://www.jscape.com/hubfs/images/csr-ca-signed-server-certificate.png
Storing key and certificate material
JCA Keystore
myKeystore.jks
Keystore keyStore = keyStore.getInstance(“JKS”);
keyStore.load(inputstream, keystorepassword);
Key key = keyStore.getKey(alias, keypassword);
Certificate certificate = keyStore.getCertificate(alias);
keytool.exe
*.JKS
*.JCEKS
*.PKCS12
Generate keys
Import/export certs
Create CSR
Keytool.exe
• Generate keypair
keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -
storepass password -validity 360 -keysize 2048
• List contents
keytool -list -keystore keystore.jks -storepass password
• Generate certificate request
keytool -certreq -alias selfsigned -keystore keystore.jks -storepass
password
• Export certificate
• keytool -exportcert -keystore keystore.jks -storepass password -alias
selfsigned > out.cer
1. Hashing
2. Symmetric encryption
3. Asymmetric encryption
4. Digital signatures
5. Certificates
https://www.cryptologie.net/article/340/tls-pre-master-secrets-and-master-secrets/
• Diffie-Hellman
• RSA
Send certificate
Encrypt with
Public key / DH
Decrypt with
Private key /DH
Generate symmetric
key
Generate symmetric
key
AES Encryption
AES Encryption
HTTPS
Validate certificate
Check digital
signature
Basic understanding of
cryptographic concepts and
how they’re done in
https://github.com/MichelSchudel/crypto-demo
www.craftsmen.nl
michel@craftsmen.nl
@MichelSchudel
Demo slides
KeyGenerator generator = KeyGenerator.getInstance("AES", "BC");
generator.init(192);
Key key = generator.generateKey();
Obtain a key
Init the algorithm with the key
Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding", "BC");
cipher.init(Cipher.ENCRYPT_MODE, key);
Encrypt the data
byte[] encryptedOutput = cipher.doFinal(“Hello, devoxx!!!”.getBytes());
CE 41 54 A4 0F E0 2B 0C 7F C7 4B 2F 6E B5 B4 7A CE 41 54 A4 0F E0
2B 0C 7F C7 4B 2F 6E B5 B4 7A CE 41 54 A4 0F E0 2B 0C 7F C7 4B 2F 6E B5 B4 7A
cipher.init(Cipher.DECRYPT_MODE, key);
cipher.doFinal(CE 41 54 A4 0F E0 2B 0C 7F C7 4B 2F 6E B5 B4 7A CE 4
2B 0C 7F C7 4B 2F 6E B5 B4 7A CE 41 54 A4 0F E0 2B 0C 7F C7 4B 2F 6E B5 B4
Decrypting
hello, devoxx
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(2048);
KeyPair kp = kpg.generateKeyPair();
Key pub = kp.getPublic();
Key pvt = kp.getPrivate();
Obtain a key
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, privateKey);
return cipher.doFinal(message.getBytes());
Encryption
Signature dsa = Signature.getInstance("SHA256withRSA");
dsa.initSign(keyPair.getPrivate());
dsa.update(“Hi devoxx!!!!”.getBytes());
byte[] signature = dsa.sign();
Creating a digital signature of a payload
Signature dsa = Signature.getInstance("SHA256withRSA ");
dsa.initVerify(kp.getPublic());
dsa.update(“Hi devoxx!!!!”.getBytes());
boolean signatureIsOk = dsa.verify(signature);
Verifying a signature
KeyGenerator generator = KeyGenerator.getInstance("HMACSha256");
Key key = generator.generateKey();
// create signature
Mac mac = Mac.getInstance("HMACSha256");
mac.init(key);
byte[] input = "Hello, world!".getBytes();
byte[] signature = mac.doFinal(input);
// validation of signature
byte[] recievedInput = "Hello, world! ".getBytes();
byte[] newSignature = mac.doFinal(recievedInput);
// now compare newly generated signature with received signature
assertEquals(new String(signature), new String(newSignature));
Symmetric signing (HMAC)
MessageDigest digester = MessageDigest.getInstance("SHA-256“);
Obtain a hash function
Put some data in the function
digester.update(“Hi there”.getBytes());
Digest the data
digester.digest();
68 B1 28 2B 91 DE 2C 05 4C 36 62 9C B8 DD 44 7F 12 F0 96 D3 E3 C5 87 97 8D C2 24 84 44 63 34 83

More Related Content

What's hot

Vorontsov, golovko ssrf attacks and sockets. smorgasbord of vulnerabilities
Vorontsov, golovko   ssrf attacks and sockets. smorgasbord of vulnerabilitiesVorontsov, golovko   ssrf attacks and sockets. smorgasbord of vulnerabilities
Vorontsov, golovko ssrf attacks and sockets. smorgasbord of vulnerabilities
DefconRussia
 
Asfws 2014 slides why .net needs ma-cs and other serial(-ization) tales_v2.0
Asfws 2014 slides why .net needs ma-cs and other serial(-ization) tales_v2.0Asfws 2014 slides why .net needs ma-cs and other serial(-ization) tales_v2.0
Asfws 2014 slides why .net needs ma-cs and other serial(-ization) tales_v2.0
Cyber Security Alliance
 

What's hot (20)

IPFS introduction
IPFS introductionIPFS introduction
IPFS introduction
 
Secure Coding principles by example: Build Security In from the start - Carlo...
Secure Coding principles by example: Build Security In from the start - Carlo...Secure Coding principles by example: Build Security In from the start - Carlo...
Secure Coding principles by example: Build Security In from the start - Carlo...
 
A story of the passive aggressive sysadmin of AEM
A story of the passive aggressive sysadmin of AEMA story of the passive aggressive sysadmin of AEM
A story of the passive aggressive sysadmin of AEM
 
Vorontsov, golovko ssrf attacks and sockets. smorgasbord of vulnerabilities
Vorontsov, golovko   ssrf attacks and sockets. smorgasbord of vulnerabilitiesVorontsov, golovko   ssrf attacks and sockets. smorgasbord of vulnerabilities
Vorontsov, golovko ssrf attacks and sockets. smorgasbord of vulnerabilities
 
Secure your app with keycloak
Secure your app with keycloakSecure your app with keycloak
Secure your app with keycloak
 
Kheirkhabarov24052017_phdays7
Kheirkhabarov24052017_phdays7Kheirkhabarov24052017_phdays7
Kheirkhabarov24052017_phdays7
 
ATT&CKING Containers in The Cloud
ATT&CKING Containers in The CloudATT&CKING Containers in The Cloud
ATT&CKING Containers in The Cloud
 
Zero-Knowledge Proofs in Light of Digital Identity
Zero-Knowledge Proofs in Light of Digital IdentityZero-Knowledge Proofs in Light of Digital Identity
Zero-Knowledge Proofs in Light of Digital Identity
 
Building secure applications with keycloak
Building secure applications with keycloak Building secure applications with keycloak
Building secure applications with keycloak
 
Secure coding presentation Oct 3 2020
Secure coding presentation Oct 3 2020Secure coding presentation Oct 3 2020
Secure coding presentation Oct 3 2020
 
Black Hat Europe 2017. DPAPI and DPAPI-NG: Decryption Toolkit
Black Hat Europe 2017. DPAPI and DPAPI-NG: Decryption ToolkitBlack Hat Europe 2017. DPAPI and DPAPI-NG: Decryption Toolkit
Black Hat Europe 2017. DPAPI and DPAPI-NG: Decryption Toolkit
 
Derbycon 2019 - I simulate therefore i catch: enhancing detection engineering...
Derbycon 2019 - I simulate therefore i catch: enhancing detection engineering...Derbycon 2019 - I simulate therefore i catch: enhancing detection engineering...
Derbycon 2019 - I simulate therefore i catch: enhancing detection engineering...
 
OWASP Secure Coding
OWASP Secure CodingOWASP Secure Coding
OWASP Secure Coding
 
BlueHat v17 || Dangerous Contents - Securing .Net Deserialization
BlueHat v17 || Dangerous Contents - Securing .Net Deserialization BlueHat v17 || Dangerous Contents - Securing .Net Deserialization
BlueHat v17 || Dangerous Contents - Securing .Net Deserialization
 
Security Code Review 101
Security Code Review 101Security Code Review 101
Security Code Review 101
 
Asfws 2014 slides why .net needs ma-cs and other serial(-ization) tales_v2.0
Asfws 2014 slides why .net needs ma-cs and other serial(-ization) tales_v2.0Asfws 2014 slides why .net needs ma-cs and other serial(-ization) tales_v2.0
Asfws 2014 slides why .net needs ma-cs and other serial(-ization) tales_v2.0
 
Implementing OAuth
Implementing OAuthImplementing OAuth
Implementing OAuth
 
JSON Web Token
JSON Web TokenJSON Web Token
JSON Web Token
 
Secure Spring Boot Microservices with Keycloak
Secure Spring Boot Microservices with KeycloakSecure Spring Boot Microservices with Keycloak
Secure Spring Boot Microservices with Keycloak
 
A Hacker's perspective on AEM applications security
A Hacker's perspective on AEM applications securityA Hacker's perspective on AEM applications security
A Hacker's perspective on AEM applications security
 

Similar to Cryptography 101 for Java Developers - JavaZone2019

Java Symmetric
Java SymmetricJava Symmetric
Java Symmetric
phanleson
 

Similar to Cryptography 101 for Java Developers - JavaZone2019 (20)

Cryptography 101 for_java_developers, Fall 2019
Cryptography 101 for_java_developers, Fall 2019Cryptography 101 for_java_developers, Fall 2019
Cryptography 101 for_java_developers, Fall 2019
 
Cryptography 101 for Java developers
Cryptography 101 for Java developersCryptography 101 for Java developers
Cryptography 101 for Java developers
 
Cryptography 101 for Java developers
Cryptography 101 for Java developersCryptography 101 for Java developers
Cryptography 101 for Java developers
 
Cargo Cult Security UJUG Sep2015
Cargo Cult Security UJUG Sep2015Cargo Cult Security UJUG Sep2015
Cargo Cult Security UJUG Sep2015
 
Cargo Cult Security at OpenWest
Cargo Cult Security at OpenWestCargo Cult Security at OpenWest
Cargo Cult Security at OpenWest
 
Java Symmetric
Java SymmetricJava Symmetric
Java Symmetric
 
Django cryptography
Django cryptographyDjango cryptography
Django cryptography
 
Encryption Boot Camp at JavaZone 2010
Encryption Boot Camp at JavaZone 2010Encryption Boot Camp at JavaZone 2010
Encryption Boot Camp at JavaZone 2010
 
Hadoop Security Now and Future
Hadoop Security Now and FutureHadoop Security Now and Future
Hadoop Security Now and Future
 
Security via Java
Security via JavaSecurity via Java
Security via Java
 
Cargo Cult Security 2014_01_18
Cargo Cult Security 2014_01_18Cargo Cult Security 2014_01_18
Cargo Cult Security 2014_01_18
 
Security and Encryption on iOS
Security and Encryption on iOSSecurity and Encryption on iOS
Security and Encryption on iOS
 
Dynamic Database Credentials: Security Contingency Planning
Dynamic Database Credentials: Security Contingency PlanningDynamic Database Credentials: Security Contingency Planning
Dynamic Database Credentials: Security Contingency Planning
 
Talk about html5 security
Talk about html5 securityTalk about html5 security
Talk about html5 security
 
Bsidesnova- Pentesting Methodology - Making bits less complicated
Bsidesnova- Pentesting Methodology - Making bits less complicatedBsidesnova- Pentesting Methodology - Making bits less complicated
Bsidesnova- Pentesting Methodology - Making bits less complicated
 
Demystifying Apple 'Pie' & TouchID
Demystifying Apple 'Pie' & TouchIDDemystifying Apple 'Pie' & TouchID
Demystifying Apple 'Pie' & TouchID
 
Top Ten Java Defense for Web Applications v2
Top Ten Java Defense for Web Applications v2Top Ten Java Defense for Web Applications v2
Top Ten Java Defense for Web Applications v2
 
DEF CON 27 - ALVARO MUNOZ / OLEKSANDR MIROSH - sso wars the token menace
DEF CON 27 - ALVARO MUNOZ / OLEKSANDR MIROSH - sso wars the token menaceDEF CON 27 - ALVARO MUNOZ / OLEKSANDR MIROSH - sso wars the token menace
DEF CON 27 - ALVARO MUNOZ / OLEKSANDR MIROSH - sso wars the token menace
 
FIPS 140-2 Validations in a Secure Enclave
FIPS 140-2 Validations in a Secure EnclaveFIPS 140-2 Validations in a Secure Enclave
FIPS 140-2 Validations in a Secure Enclave
 
Zeronights 2016 - Automating iOS blackbox security scanning
Zeronights 2016 - Automating iOS blackbox security scanningZeronights 2016 - Automating iOS blackbox security scanning
Zeronights 2016 - Automating iOS blackbox security scanning
 

More from Michel Schudel

More from Michel Schudel (11)

Testing an onion architecture - done right
Testing an onion architecture - done rightTesting an onion architecture - done right
Testing an onion architecture - done right
 
What makes a high performance team tick?
What makes a high performance team tick?What makes a high performance team tick?
What makes a high performance team tick?
 
Atonomy of-a-tls-handshake-mini-conferentie
Atonomy of-a-tls-handshake-mini-conferentieAtonomy of-a-tls-handshake-mini-conferentie
Atonomy of-a-tls-handshake-mini-conferentie
 
Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition!
Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition! Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition!
Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition!
 
Micronaut brainbit
Micronaut brainbitMicronaut brainbit
Micronaut brainbit
 
Java n-plus-1-incl-demo-slides
Java n-plus-1-incl-demo-slidesJava n-plus-1-incl-demo-slides
Java n-plus-1-incl-demo-slides
 
Let's build a blockchain.... in 40 minutes!
Let's build a blockchain.... in 40 minutes!Let's build a blockchain.... in 40 minutes!
Let's build a blockchain.... in 40 minutes!
 
Let's Build A Blockchain... in 40 minutes!
Let's Build A Blockchain... in 40 minutes!Let's Build A Blockchain... in 40 minutes!
Let's Build A Blockchain... in 40 minutes!
 
What's new in Java 11
What's new in Java 11What's new in Java 11
What's new in Java 11
 
Java 9 overview
Java 9 overviewJava 9 overview
Java 9 overview
 
Test your microservices with REST-Assured
Test your microservices with REST-AssuredTest your microservices with REST-Assured
Test your microservices with REST-Assured
 

Recently uploaded

TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
mohitmore19
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
VictorSzoltysek
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 

Recently uploaded (20)

Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
SHRMPro HRMS Software Solutions Presentation
SHRMPro HRMS Software Solutions PresentationSHRMPro HRMS Software Solutions Presentation
SHRMPro HRMS Software Solutions Presentation
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfThe Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 

Cryptography 101 for Java Developers - JavaZone2019